oracle数据库的所有表结构、数据、索引等需要需从测试库迁移到正式库。
oracle数据库迁移,主要通过expdp从测试库所在的源服务器将指定的数据表或数据源导出为一个或多个数据文件(.dmp文件),导出的数据可以在正式库中通过impdp数据导入工具进行导入。
前提:服务器为linux系统。
在源服务器上创建一个目录对象,用于指定导入数据文件的路径。可以使用以下命令创建目录对象:
# su - oracle
# sqlplus / as sysdba
SQL> create or replace directory tmpDir as '/tempFile'
tmpDir是目录对象的名称,/tempFile是导入数据文件的路径。
# su - oracle
# expdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp logfile=export.log
扩展:
导出单个表的语句:
# expdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher
其中,tables是要导入的数据表名称,多个数据表之间使用逗号分隔
# scp -P 2222 /tempFile/export.dmp [email protected]:/home/tempFile
输入目标服务器密码,按回车,文件就会自动传输到目标服务器中指定的文件夹中。
其中,[email protected]中name为目标服务器登陆账号,xxx.xxx.xxx.xxx为目标服务器ip地址。2222是目标服务器的端口号。
如果目标服务器部署22端口或者目标服务器与源服务器端口不一致,则需要用【-P 端口】指定目标服务器端口。
在目标服务器上创建一个目录对象,用于指定导入数据文件的路径。可以使用以下命令创建目录对象:
# su - oracle
# sqlplus / as sysdba
SQL> create or replace directory tmpDir as '/tempFile'
tmpDir是目录对象的名称,/tempFile是导入数据文件的路径。
# su - oracle
# impdp username/password@Ip:port/database schemas=dbTest directory=tmpDir dumpfile=export.dmp job_name=myjob
如果源表对象和目标表对象不一致则需要用remap_schema,重新对应迁移原表对象和目标表对象。
# impdp username/password@Ip:port/database remap_schema=dbTest:oprection directory=tmpDir dumpfile=export.dmp job_name=myjob
注意:
remap_schema=dbTest:oprection中格式为dmp文件所在的schema:目标服务器数据库的schema。
扩展
(1)单表导入:
# impdp username/password@Ip:port/database directory=tmpDir dumpfile=export.dmp tables=student,school,teacher
需要注意的是,在导入数据表时,如果目标数据库中已经存在同名的数据表,需要使用REMAP_TABLE选项将数据表重新映射到新的表名或者新的表空间中,例如:
#
impdp username/password@database_schema tables=table1,table2 directory=tmpDir dumpfile=export.dmp logfile=import.log REMAP_TABLE=table1:new_table1,table2:new_table2
替换已存在的表需加上:table_exists_action=replace
导入的dmp文件需要设置下权限,然后重新进行导入操作。
# chmod 777 /home/tempFile/export.dmp
当使用expdp命令导出单个数据表时,需要指定TABLES选项来指定要导出的表名,同时也需要指定SCHEMAS选项来指定要导出的数据库用户。如果同时指定了TABLES和SCHEMAS选项,可能会出现UDE-00010错误,提示“multiple job modes requested, schema and tables”。
解决这个问题,可以在导出命令中只指定TABLES选项,不指定SCHEMAS选项。例如:
#
expdp username/password@database_schema tables=table_name directory=data_pump_dir dumpfile=export.dmp
如果需要导出多个表,可以在TABLES选项中使用逗号分隔多个表名
导出测试库的时候数据在更新,导致了dmp文件中设备主键的值有重复的,需要删除数据后,手动新建主键。