oracle 数据泵 EXPDP&IMPDP

久未见 提交于 2020-04-07 08:51:38

导出/导入步骤:

expdp system/pwd directory=s_dirname dumpfile=mes1_20150810.dmp logfile=mes1_20150810.log schemas=mes1 CONTENT=METADATA_ONLY

1.在源资料库s中查看mes1与mes4中所有表和索引存放的表空间名称:

SQL@S> SELECT DISTINCT TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER IN('MES1','MES4');
SQL@S> SELECT DISTINCT TABLESPACE_NAME FROM DBA_INDEXES WHERE OWNER IN ('MES1','MES4');

2.根据查询结果,在目标数据库t中建立相同名称的表空间,数据文件位置根据t服务器实际磁盘分区决定.可以与s数据文件位置不同.

SQL@T> CREATE TABLESPACE CMES DATAFILE 'XXXX.DBF' SIZE 300M AUTOEXTEND ON 30M;

……

3.在t中新建账号mes1/mes4/ztm01t1_ap,角色cit_group/mes_select.默认表空间设置为mes_user

SQL@T> CREATE USER MES1 IDENTIFIED BY pwd DEFAULT TABLESPACE mes_user;
SQL@T> CREATE USER MES4 IDENTIFIED BY pwd DEFAULT TABLESPACE mes_user;
SQL@T> CREATE USER ztm01t1_ap IDENTIFIED BY pwd DEFAULT TABLESPACE mes_user;
SQL@T> GRANT CONNECT TO ztm01t1_ap;
SQL@T> CREATE ROLE cit_group NOT IDENTIFIED;
SQL@T> CREATE ROLE mes_select NOT IDENTIFIED;
SQL@T> GRANT CONNECT TO cit_group;
SQL@T> GRANT CONNECT TO mes_select;

4.将s中mes1的数据使用数据泵导出.

4.1 在s中查找可读写的目录对象

SQL@S> SELECT DIRECTORY_NAME,DIRECTORY_PATH FROM DBA_DIRECTORIES;

4.2 导出s中MES1用户下的所有数据

oracle@S> expdp system/pwd directory=s_dirname dumpfile=mes1_20150810.dmp logfile=mes1_20150810.log schemas=mes1

4.3 在t中查找可读写的目录对象,拷贝mes1_20150810.dmp到对应目录下

SQL@T> SELECT DIRECTORY_NAME,DIRECTORY_PATH FROM DBA_DIRECTORIES;

4.4 使用数据泵,将mes1数据导入t,注意查看日志是否有报错信息.

oracle@T> impdp system/pwd directory=t_dirname dumpfile=mes1_20150810.dmp logfile=mes1_20150810.log schemas=mes1

5. 同样方法将mes4/ztm01_ap下的数据导入t

注意:ztm02_ap用户下的数据导入t时,添加参数remap_schema,如下:

oracle@T> impdp system/pwd directory=t_dirname dumpfile=mes1_20150810.dmp logfile=mes1_20150810.log schemas=ztm01_ap remap_schema=ztm01_ap:ztm01t1_ap

6.比较s与t各用户下对象数目是否相同,如果不同考虑重新导入数据

SQL@S> SELECT OWNER,OBJECT_TYPE,COUNT(OBJECT_TYPE) FROM DBA_OBJECTS WHERE OWNER IN ('MES1','MES4','ZTM01_AP') GROUP BY OWNER,OBJECT_TYPE ORDER BY OWNER;

7.根据s,在t的对应账号授予对象权限(以MES1用户为例)

SQL@S> SELECT GRANTEE,OWNER,TABLE_NAME,PRIVILEGE FROM DBA_TAB_PRIVS WHERE OWNER='MES1';
SQL@T> GRANT INSERT ON MES1.XXX TO XXXX;

导出c开头的表

expdp system/Foxconn88 directory=expdp_dir dumpfile=test02.dmp schemas=test INCLUDE=TABLE:"LIKE'C%'"

导出除了c开头的表

expdp system/Foxconn88 directory=expdp_dir dumpfile=test05.dmp schemas=test INCLUDE=TABLE:\"NOT LIKE \'C%\'\"

导出某个表

expdp system/Foxconn88 directory=expdp_dir dumpfile=test08.dmp schemas=test INCLUDE=TABLE:\"IN\(\'C01\',\'C02\',\'C03\'\)\"

导出除了C01,C02的表

expdp system/Foxconn88 directory=expdp_dir dumpfile=test10.dmp schemas=test EXCLUDE=TABLE:\"IN\(\'C01\',\'C02\'\)\"

配额(quota):允许被使用的空间

SQL>conn sys/password as sysdba;
SQL>alter user myuser quota 10M[unlimited] on users;

这个问题如果在授予权限时授予reource角色就不会出现。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!