环境:Oracle数据迁移,版本 11.2.0.4 -> 12.2.0.1
思考:
对于DBA而言,常用物理方式的迁移,物理迁移的优势不必多说,使用这种方式不必担心对象前后不一致的情况,而这往往也解决了不懂业务的DBA最头疼的问题。
对于开发而言,常用逻辑方式的迁移,比如传统的exp/imp或者现在的expdp/impdp,优势是简单方便,不需要了解过多的数据库运维知识。
实际上,在某些数据库升级的场景下,针对业务数据量不大,停机时间充裕的迁移专项来说,也可以考虑采用数据泵逻辑迁移的方式。
那么数据泵的导出导入究竟需要注意哪些事项呢?本文宗旨是通过构建一个简单的例子来说明。
1.构建测试用例
2.查询特殊对象
3.测试迁移过程
4.正式迁移过程
1.构建测试用例
我的想法是,构建一个小的测试用例,但尽可能的包含更多类型的对象,从而模拟现实绝大部分的场景。
那么,仔细的思考下,我们至少需要创建:
1.1 用户的默认数据表空间、索引表空间、临时表空间
1.2 多个用户schema,拥有不同的角色权限
1.3 用户下建有表(普通堆表、索引组织表、全局临时表、分区表、簇表、外部表),表上的约束(主键、外键)
1.4 用户下建有索引(B-Tree索引、bitmap索引、函数索引、分区索引)
1.5 用户下有视图(普通视图、物化视图)
1.6 用户下有同义词(public的同义词,private的同义词)
1.7 用户下有dblink(public的dblink,private的dblink)
1.8 用户下有存储过程、函数、触发器、包、包体、序列
2.查询特殊对象
2.1 查询public database link
select dbms_metadata.get_ddl('DB_LINK',DB_LINK,'PUBLIC') FROM DBA_DB_LINKS where owner='PUBLIC';
SYS@linuxmi >select dbms_metadata.get_ddl('DB_LINK',DB_LINK,'PUBLIC') FROM DBA_DB_LINKS where owner='PUBLIC';
SYS@linuxmi >set long 999999
SYS@linuxmi >/
DBMS_METADATA.GET_DDL('DB_LINK',DB_LINK,'PUBLIC')
--------------------------------------------------------------------------------
CREATE PUBLIC DATABASE LINK "TO_JYZHAO_LD"
CONNECT TO "LUDAN" IDENTIFIED BY VALUES ':1'
USING 'JYZHAO'
SYS@linuxmi >
2.2 查询public synonym
SYS@linuxmi >SELECT DBMS_METADATA.GET_DDL('SYNONYM',a.SYNONYM_NAME,a.owner) FROM DBA_SYNONYMS a where a.owner ='PUBLIC' and table_owner in ('JINGYU','LUDAN');
DBMS_METADATA.GET_DDL('SYNONYM',A.SYNONYM_NAME,A.OWNER)
--------------------------------------------------------------------------------
CREATE OR REPLACE PUBLIC SYNONYM "PUBIC_DEPT" FOR "JINGYU"."DEPT"
CREATE OR REPLACE PUBLIC SYNONYM "PUBIC_EMP" FOR "JINGYU"."EMP"
SYS@linuxmi >
2.3 查询外部表
SYS@linuxmi >select * from dba_external_tables;
OWNER TABLE_NAME TYP TYPE_NAME DEF DEFAULT_DIRECTORY_NAME REJECT_LIMIT ACCESS_
------------------------------ ------------------------------ --- ------------------------------ --- ------------------------------ ---------------------------------------- -------
ACCESS_PARAMETERS PROPERTY
-------------------------------------------------------------------------------- ----------
SH SALES_TRANSACTIONS_EXT SYS ORACLE_LOADER SYS DATA_FILE_DIR 100 CLOB
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII ALL
TERRITORY AMERICAN
BADFILE log_file_dir:'ext_1v3.bad'
LOGFILE log_file_dir:'ext_1v3.log'
FIELDS TERMINATED BY "|" OPTIONALLY ENCLOSED BY '^' LDRTRIM
( PROD_ID ,
CUST_ID ,
TIME_ID DATE(10) "YYYY-MM-DD",
CHANNEL_ID ,
PROMO_ID ,
QUANTITY_SOLD ,
AMOUNT_SOLD ,
UNIT_COST ,
UNIT_PRICE
)
SYS@linuxmi >
3.测试迁移过程