Oracle expdp/impdp测试库搭建过程

来源:互联网 发布:memcache java 编辑:程序博客网 时间:2024/05/21 22:54

最近客户需要搭建一个测试库,折腾完,正好把的经验整理一下。

一、测试库库创建:

  1. 在windows下创建数据库最好以管理员权限运行,即使是Administrator登录也要这样操作,一般我们最好是保证使用Administrator来创建。不然后面可能监听无法创建。
  2. 数据库是OLAP还是OLTP,OLAP最好修改一下数据块
  3. 字符集一定要和生产库的保持一致,包括Language。同时保证nls_database_parameternls_instance_parameter中的language保持一致
  4. 根据自己情况,修改以下参数:
alter database noarchivelog;alter database flashback off;alter system set processes=500 scope=spfile;alter system set sessions=555 scope=spfile ;alter profile default limit password_life_time unlimited;alter profile default limit failed_login_attempts unlimited;

二、生产库数据导出

  1. 在导出之前我们需要做一下评估,看看要导出的数据需要多少空间,如果太大,数据文件最好分片,不能导出速度太慢
expdp system/test@test schemas=(hr,scott) directory=dumpdir parallel=5 estimate_only=Y estimate=blocks#这个estimate可以选择根据blocks或者statics来计算
  1. 我们需要清除是否服务器上安装过多次Oracle软件,也就是说有多个expdp文件,因为要保证使用的Oracle服务器所在目录下的expd最安全。
linux: which expdpwindows: where expdp
  1. 导出的环境变量中的字符集要与数据库的符集保持一致,在windows中就要核对注册表与数据库的符集是否一致。不然在导出过程中报错:
ORA-39064: 无法写入日志文件  ORA-29285: 文件写入错误 
  1. 如果导出的文件很大且需要网络传送,最好是考虑压缩一下文件,压缩的方式有ALL, DATA_ONLY, [METADATA_ONLY] and NONE. 一般就用ALL就好。
  2. 导出过程中如果手工停止,有可能后台进程并会停止,仍然在导出,这时就需要手工把相应进程Kill掉。再次导出时可以使用reuse_dumpfiles=Y来重用之前的dump文件。
  3. 在分片导出的情况下可以考虑并行,并行度就要根据服务器的CPU有关,不同服务器计算方式不一样,这里就不建议了,大家看着办。%U代表分片的编号。
  4. expdp导出当然需要先创建目录,我们需要注意的是这个目录要允许数据库创建用户可读写。在windows要保证创建者(一般是adminstrator)和ora_dba组有读写权限,在linux只用保证创建者有读写权限就可以了。

导出命令如下:

sqlplus sys/test@test as sysdbaSQL>create directory dumpdir as '~/dumpdir'SQL>grant read,write on directory dumpdir to systemSQL>exit expdp system/test@test schemas=(hr,scott) directory=dumpdir dumpfile=expdb_%U.dmp logfile=expdp.log parallel=5 filesize=5G compression=ALL reuse_dumpfiles=Y

三、测试库导入

  1. 导入时要考虑服务器的空间,因为即将导入的dump文件需要占用一定的空间,导入数据库完成之前不能删除,导入的过程中数据库也需要大量空间,所以最好是要有生产库的双倍空间,如果dump压缩了就可以不需要这么多空间。
  2. 环境变量的字符集和luange是否与生产库、测试库中一致。一定要保证一致。原因上面讲过了。
  3. 创建表空间并添加数据文件,表空间的名最好与生产库相同,如果不同,需要使用remap_tablespace=prod_tbs:sit_tbs 来映射。添加的文件最好一次性指定大小,不要让数据库在导入的时候自动扩展,这样效率不高。
create tablespace test datafile '/opt/app/oracle/data/test01.dbf'  size 30G;               alter tablespace test add datafile '/opt/app/oracle/data/test02.dbf'  size 30G;                              ........

–以下SQL在生产库中查出各表空间的大小

select a.tablespace_name,round(total_size,2),round(free_size,2),round(total_size-free_size,2) as  use_size from (select tablespace_name,sum(bytes)/power(1024,3) total_size from dba_data_files a group by tablespace_name) a,(select tablespace_name,sum(bytes)/power(1024,3) free_size from dba_free_space a group by tablespace_name) bwhere a.tablespace_name=b.tablespace_nameorder by 2 desc
  1. impdp会自动创建schema,不用手工创建,如果创建也没有关系。
  2. 导入导出的并行度最好是相同
  3. impdp当然也需要创建目录,注意事项就不再赘述了。
  4. 如果生产库数据库版本比测试库高,就需要指定version。要保证兼容。

导入命令

sqlplus sys/test@test as sysdbaSQL>create directory dumpdir as '~/dumpdir'SQL>grant read,write on directory dumpdir to systemSQL>exit impdp system/test@test schemas=(hr,scott) directory=dumpdir dumpfile=expdb_%U.dmp logfile=impdp.log parallel=5

问题处理:

  1. impdp时报错如下:
ORA-39002: invalid operation                                                                   ORA-39059: dump file set is incomplete                          ORA-39246: cannot locate master table within provided dump files  

在expdp时导出时提示已成功导出,且复制文件时也没有漏掉。后来在生产库重新创建了目录,然后重新导出,再导入时就没问题了。可能之前在这个目录执行了多次expdp,没有保证上一次expdp的进程完全结束就开始了新一次expdp导致的。也有说部分dump文件的权限oracle无法访问也会导致这种情况。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 送话器堵住了怎么办 手表镀层磨损怎么办 网贷被拒概率99 怎么办 钻石画掉钻怎么办 北京市车牌怎么办 信用卡代会封卡怎么办 遇到平安高利贷怎么办 拍拍贷充值失败怎么办 手机号已注销怎么办 拍拍贷钱还完了怎么办 拍拍贷加微信发律师函怎么办 商奇宝逾期怎么办 贷款换不上怎么办 开店牌匾怎么办 上海拍拍贷流标怎么办 民间借贷手续怎么办 网上贷款被骗怎么办 二手车分期被骗怎么办 车拖审了怎么办 车置宝拖欠尾款怎么办 过户车脱保了怎么办 二手车手续怎么办 定车不想要了怎么办 转转卖假货怎么办 淘宝收到投诉怎么办 京东不想要了怎么办 微店少发货怎么办 平衡车开不开机怎么办 闲鱼被限制私信怎么办 电脑城被坑怎么办 闲鱼买手机退货怎么办 京东发错货了怎么办 网络不流畅怎么办 网贷花了都秒拒怎么办 拍拍贷款还不上怎么办 拍拍灯关不掉怎么办 拍拍逾期一年怎么办 贷贷红二次贷款怎么办 账号申诉过后怎么办 我来贷换手机号怎么办 被网贷爆通讯录怎么办