利用数据泵进行数据迁移已经不新鲜了,在数据库升级中也经常使用。很多步骤都是大同小异,这个实验就是讲oracle11g R2数据库迁移到12cR2的PDB中。
相关参考文档:
http://docs.oracle.com/database/121/UPGRD/preup.htm#UPGRD12371
http://docs.oracle.com/database/121/UPGRD/expimp.htm#UPGRD12565
安装好12c数据库软件并创建数据库(dbca).
略...
参考:12c R2安装http://www.cndba.cn/Expect-le/article/1746
通过数据泵进行迁移有两种方法:
1. Expdp/impdp
2. Impdp dblink 语法:IMPDP import_user NETWORK_LINK=db_link FULL=Y;
好处:节省源库的存储空间,占带宽。
源库:
SQL> select * from v$version where rownum=1;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
目标库:
BANNER CON_ID
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
为了验证数据是否正确导入
SQL> select count(*) from scott.emp;
COUNT(*)
----------
14
Data Pump can be used to migrate all or any portion of a database between different releases of the database software. The Data Pump Export VERSION parameter is typically used to do this. This will generate a Data Pump dump file set compatible with the specified version.
The default value for VERSION is COMPATIBLE, indicating that exported database object definitions will be compatible with the release specified for the COMPATIBLE initialization parameter.
In an upgrade situation, when the target release of a Data Pump-based migration is higher than the source, the VERSION parameter typically does not have to be specified because all objects in the source database will be compatible with the higher target release. An exception is when an entire Oracle Database 11g (release 11.2.0.3 or higher) is exported in preparation for importing into Oracle Database 12c Release 1 (12.1.0.1) or later. In this case, explicitly specify VERSION=12 in conjunction with FULL=YES in order to include a complete set of Oracle internal component metadata.
In a downgrade situation, when the target release of a Data Pump-based migration is lower than the source, the VERSION parameter should be explicitly specified to be the same version as the target. An exception is when the target release version is the same as the value of the COMPATIBLE initialization parameter on the source system; then VERSION does not need to be specified. In general however, Data Pump import cannot read dump file sets created by an Oracle release that is newer than the current release unless the VERSION parameter is explicitly specified.
从上面可以看出11.2.0.3及以上导入到12.1.0.1及以上,需要在导出时加version=12
[[email protected] ~]$ expdp system/oracle directory=lei_dir full=y dumpfile=dbfull.dmp logfile=dbfull.log version=12
Export: Release 11.2.0.4.0 - Production on Fri Jul 28 22:50:17 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_FULL_01": system/******** directory=lei_dir full=y dumpfile=dbfull.dmp logfile=dbfull.log
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 125.3 MB
Processing object type DATABASE_EXPORT/TABLESPACE
Processing object type DATABASE_EXPORT/PROFILE
Processing object type DATABASE_EXPORT/SYS_USER/USER
Processing object type DATABASE_EXPORT/SCHEMA/USER
略.................
. . exported "SYSTEM"."REPCAT$_TEMPLATE_TARGETS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_USER_AUTHORIZATIONS" 0 KB 0 rows
. . exported "SYSTEM"."REPCAT$_USER_PARM_VALUES" 0 KB 0 rows
. . exported "SYSTEM"."SQLPLUS_PRODUCT_PROFILE" 0 KB 0 rows
. . exported "SYSTEM"."TOAD_PLAN_TABLE" 0 KB 0 rows
Master table "SYSTEM"."SYS_EXPORT_FULL_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_FULL_01 is:
/u01/backup/dbfull.dmp
Job "SYSTEM"."SYS_EXPORT_FULL_01" successfully completed at Fri Jul 28 22:52:02 2017 elapsed 0 00:01:44
导出完成!
[[email protected] ~]$ scp /u01/backup/dbfull.dmp 192.168.1.110:/u01/backup/
--检查导入文件
[[email protected] backup]$ ll dbfull.dmp
-rw-r----- 1 oracle oinstall 140853248 Jul 28 02:56 dbfull.dmp
--执行导入,导入LEI1中
SQL> alter session set container=lei1;
SQL> create directory cndba as '/u01/backup';
Directory created.
注意:导入的时候,虽然会自动创建表空间和相关数据文件,但是要确保源库的数据文件所在的目录,目标库也要存在相应的目录,要不就会报错。
如:
ORA-39083: Object type TABLESPACE:"IUYJ" failed to create with error:
ORA-01119: error in creating database file '/u01/app/oracle/product/11.2.0.4/db_1/dbs/ytruty'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
[[email protected] ~]$ impdp [email protected]:1521/LEI1 DIRECTORY=cndba full=y logfile=impfull.log dumpfile=dbfull.dmp
Import: Release 12.2.0.1.0 - Production on Fri Jul 28 15:00:10 2017
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
Warning: possible data loss in character set conversions
Starting "SYSTEM"."SYS_IMPORT_FULL_01": [email protected]:1521/LEI1 DIRECTORY=cndba full=y logfile=impfull.log dumpfile=dbfull.dmp
Processing object type DATABASE_EXPORT/TABLESPACE
ORA-31684: Object type TABLESPACE:"UNDOTBS1" already exists
ORA-31684: Object type TABLESPACE:"TEMP" already exists
ORA-31684: Object type TABLESPACE:"USERS" already exists
略.............
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
. . imported "SYSTEM"."SYS_EXPORT_FULL_01" 25.58 MB 25939 rows
. . imported "LEO"."SYS_EXPORT_FULL_01" 21.29 MB 21429 rows
. . imported "SQLTXPLAIN"."SQLI$_FILE" 11.77 MB 148 rows
. . imported "LEO"."LEO" 8.376 MB 86371 rows
. . imported "SQLTXPLAIN"."TRCA$_FILE" 5.270 MB 10 rows
. . imported "APEX_030200"."WWV_FLOW_PAGE_PLUGS" 3.834 MB 7416 rows
. . imported "APEX_030200"."WWV_FLOW_STEP_ITEMS" 3.505 MB 9671 rows
. . imported "APEX_030200"."WWV_FLOW_DICTIONARY$" 2.909 MB 70601 rows
. . imported "APEX_030200"."WWV_FLOW_STEP_PROCESSING" 1.248 MB 2238 rows
. . imported "APEX_030200"."WWV_FLOW_REGION_REPORT_COLUMN" 1.146 MB 7903 rows
. . imported "APEX_030200"."WWV_FLOW_STEP_ITEM_HELP" 1003. KB 6335 rows
. . imported "SYSMAN"."MGMT_METRICS" 3.233 MB 12635 rows
. . imported "APEX_030200"."WWV_FLOW_STEPS" 570.5 KB 1754 rows
. . imported "LEI"."TEST" 701.6 KB 2810 rows
. . imported "SQLTXPLAIN"."SQLT$_LOG" 643.1 KB 3373 rows
. . imported "SQLTXPLAIN"."TRCA$_IND_COLUMNS$" 622.2 KB 8134 rows
. . imported "APEX_030200"."WWV_FLOW_LIST_ITEMS" 590.3 KB 3048 rows
........
ORA-39082: Object type FUNCTION:"SYSMAN"."ENCRYPTBYTES" created with compilation warnings
ORA-39082: Object type FUNCTION:"SYSMAN"."DECRYPTBYTES" created with compilation warnings
ORA-39082: Object type FUNCTION:"SYSMAN"."ENCRYPT" created with compilation warnings
ORA-39082: Object type FUNCTION:"SYSMAN"."DECRYPT" created with compilation warnings
ORA-39082: Object type PROCEDURE:"APEX_030200"."F" created with compilation warnings
ORA-39082: Object type PROCEDURE:"APEX_030200"."APEX_ADMIN" created with compilation warnings
ORA-39082: Object type PROCEDURE:"APEX_030200"."HTMLDB_ADMIN" created with compilation warnings
ORA-39082: Object type PROCEDURE:"SCOTT"."TEST_JOBPROCE" created with compilation warnings
ORA-39082: Object type VIEW:"SYSMAN"."AQ$MGMT_NOTIFY_QTABLE" created with compilation warnings
ORA-39082: Object type VIEW:"SYSMAN"."AQ$MGMT_LOADER_QTABLE" created with compilation warnings
ORA-39082: Object type TRIGGER:"APEX_030200"."WWV_BIU_FLOW_SESSIONS" created with compilation warnings
ORA-39082: Object type TRIGGER:"SYSMAN"."MGMT_CREDS_INS_UPD" created with compilation warnings
--如果有无效对象,运行?/rdbms/admin/utlrp.sql重新编译,切换到相应的PDB下运行。非SYS,SYSTEM的无效对象,需要手动进行处理。 Job "SYSTEM"."SYS_IMPORT_FULL_04" completed with 3918 error(s) at Fri Jul 28 16:35:46 2017 elapsed 0 00:28:19
SQL> select count(*) from scott.emp;
COUNT(*)
----------
14
表的数据量一致。
从目前来看,已经顺利的将11g迁移到12c R2中。