`

oracle 数据备份

 
阅读更多
使用EXPDP和IMPDP时应该注意的事项:

EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。

EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。

IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。

expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:

expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。

create directory dpdata1 as 'd:\test\dump';

二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)

select * from dba_directories;

三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。

grant read,write on directory dpdata1 to scott;

把A的权限给B
先进入到A中 connect A/A的密码;grant all privileges to B with admin option;这样就授权了 你试试吧 我试过了的 通过了

四、导出数据

1)按用户导

expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

2)并行进程parallel

expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3

3)按表名导

expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;

4)按查询条件导

expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';

5)按表空间导

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;

6)导整个数据库

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

五、还原数据

1)导到指定用户下

impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;

2)改变表的owner

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;

3)导入表空间

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;

4)导入数据库

impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;

5)追加数据

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEM





===================================================================
expdp SSS_BUS/SSS_BUS@SSS_BUS dumpfile=SSS_BUS_20140428.dmp schemas=SSS_BUS
impdp SSS_BUS_06/SSS_BUS_06@SSS_BUS dumpfile=SSS_BUS_20140428.DMP
remap_schema :在数据库中,每个表的定义前都会带有该数据库的用户名,如果导出的数据库和导入的数据库是一个名称的,则此参数可忽略
如果前后名称不一致,则用冒号(":")分隔开,前面是旧数据库名,后面是新数据库名

用有管理权限的用户进行登录
sqlplus SSS_BUS/SSS_BUS@SSS as SYSDBA
彻底删除该用户的信息。
drop user SSS_BUS cascade;
创建一个新的用户
create user SSS_BUS identified by SSS_BUS default tablespace USERS temporary tablespace TEMP;
把基本的权限赋给这个用户
grant connect to SSS_BUS;
grant resource to SSS_BUS;
grant SYSDBA  to SSS_BUS;
grant read,write on directory DATA_PUMP_DIR to SSS_BUS;
grant exp_full_database to SSS_BUS;

===============================================================
注意点

expdp SYSTEM/ORCL schemas=SSS_BUS DIRECTORY=dpdata2 dumpfile=expdp.dmp;

impdp SYSTEM/ORCL  DIRECTORY=dpdata2 dumpfile=expdp.dmp  REMAP_SCHEMA=SSS_BUS:SSS_BUS_01

导入的时候疑问用户名称不同要加上 REMAP_SCHEMA 前面上原来导出用户名后面的是要导入的用户名称

要放在文件的前面要不然会报错

impdp SSS_BUS/SSS_BUS@SSS_DEV8 dumpfile=SSS_BUS_20140605.DMP  remap_schema=SSS_BUS:SSS_BUS_03

[@SSS_DEV8]追加是客户端和服务端不在同一个电脑上使用

---------------------------------
http://blog.chinaunix.net/uid-7530389-id-2050081.html 问题点















--------------------------------------------


DOS下数据库的导入导出:
只要在oracle的net manager中把oracle的服务连接配置好,在本地・服务器侧都可以执行导出・导入。
但是不管在本地,还是在服务器端执行命令,导入导出的文件都要放到服务器侧的目录里。
net manager中的配制方法请参照【設定】

データエクスポート
expdp  dbUserId/dbPassword@ServiceName dumpfile=backupFileName.dmp schemas=dbName
例 expdp SSS_BUS/SSS_BUS@SSS_BUS dumpfile=SSS_BUS_20140428.dmp schemas=SSS_BUS
expdp SSS_BUS/SSS_BUS@SSS_DEV8 dumpfile=SSS_IM_2014_7_24.dmp schemas=SSS_IM

データインポート
impdp dbUserId/dbPassword@serviceName dumpfile=backupFileName.dmp  remap_schema=oldDbName:newDbName
remap_schema :在数据库中,每个表的定义前都会带有该数据库的用户名,如果导出的数据库和导入的数据库是一个名称的,则此参数可忽略
如果前后名称不一致,则用冒号(":")分隔开,前面是旧数据库名,后面是新数据库名
例 impdp SSS_BUS/SSS_BUS@SSS_DEV8 dumpfile=SSS_BUS_20140605.DMP  remap_schema=SSS_BUS:SSS_BUS_03
impdp IMART8_SSS_DEV/IMART8_SSS_DEV@SSS_DEV8 dumpfile=IMART8_SSS_DEV.DMP REMAP_SCHEMA=IMART8_SSS_DEV:IMART8_SSS_DEV_INTERN

ユーザ作成
在数据导入时,如果数据库中已经存在了同名的表,则在数据库导入时会发生错误。这时最好把该用户清空,或者把此用户删掉,重新创建数据库用户
在cmd下进行以下操作。
① 用有管理权限的用户进行登录
sqlplus SSS_BUS/SSS_BUS@SSS as SYSDBA
② 彻底删除该用户的信息。
drop user SSS_BUS cascade;
③ 创建一个新的用户
create user IMART8_SSS_DEV_INTERN identified by IMART8_SSS_DEV_INTERN default tablespace USERS temporary tablespace TEMP;
④ 把基本的权限赋给这个用户
grant connect to IMART8_SSS_DEV_INTERN;
grant resource to IMART8_SSS_DEV_INTERN;
grant SYSDBA  to SSS_BUS; 这个权限太大了,其实不给也可以,看情况。
grant read,write on directory DATA_PUMP_DIR to IMART8_SSS_DEV_INTERN;
grant exp_full_database to IMART8_SSS_DEV_INTERN;

逻辑目录
在进行上面的导入导出操作时,如果不指定操作目录,默认指向目录【DATA_PUMP_DIR 】
当然自己也可以创建目录,指向自己创建的目录。

一、创建逻辑目录,该命令不会在操作系统创建真正的目录(请先创建真正的目录),最好以system等管理员创建逻辑目录。
登陆数据库
conn system/manger@orcl as sysdba conn system/manger@orcl as sysdba
创建目录
create directory dump_dir as 'd:\test\dump';

二、查看创建好的目录(同时查看操作系统中该目录是否存在,因为oracle并不关心该目录是否存在,假如不存在,则出错)
select * from dba_directories;

三、给用户(即上面的dbUserId)赋予读写该目录的权限。(导出时需要向这个目录写文件,导入时需要从这个目录读文件)
grant read,write on directory dump_dir to scott;

四、上面的导入导出操作默认指向【DATA_PUMP_DIR】,也可以指向上面自己刚定义的目录,只要在导入导出时加上下面的语句就可以了。
expdp dbUserId/dbPassword@serviceName directory = dump_dir dumpfile=backupFileName.dmp schemas=dbName
impdp dbUserId/dbPassword@serviceName directory = dump_dir dumpfile=backupFileName.dmp remap_schema=oldDbName:newDbName

当然也可以不指定目录,
expdp dbUserId/dbPassword@serviceName dumpfile=c:\oracle\backupFileName.dmp schemas=dbName
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics