最近客户需要搭建一个测试库,折腾完,正好把的经验整理一下。
一、测试库库创建:
在windows下创建数据库最好以管理员权限运行,即使是Administrator登录也要这样操作,一般我们最好是保证使用Administrator来创建。不然后面可能监听无法创建。 数据库是OLAP还是OLTP,OLAP最好修改一下数据块 字符集一定要和生产库的保持一致,包括Language。同时保证nls_database_parameter和nls_instance_parameter中的language保持一致 根据自己情况,修改以下参数:
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;
二、生产库数据导出
在导出之前我们需要做一下评估,看看要导出的数据需要多少空间,如果太大,数据文件最好分片,不能导出速度太慢
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) b where a.tablespace_name=b.tablespace_name order by 2 desc
impdp会自动创建schema,不用手工创建,如果创建也没有关系。 导入导出的并行度最好是相同 impdp当然也需要创建目录,注意事项就不再赘述了。 如果生产库数据库版本比测试库高,就需要指定version。要保证兼容。
导入命令
sqlplus sys/test@test as sysdba SQL>create directory dumpdir as '~/dumpdir' SQL>grant read,write on directory dumpdir to system SQL>exit impdp system/test@test schemas=(hr,scott) directory=dumpdir dumpfile=expdb_%U.dmp logfile=impdp.log parallel=5
问题处理:
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无法访问也会导致这种情况。