阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle数据库逻辑迁移之数据泵的注意事项

184次阅读
没有评论

共计 4052 个字符,预计需要花费 11 分钟才能阅读完成。

环境: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. 测试迁移过程

主要测试逻辑迁移的可行性,为之后正式停机时的操作奠定基础。
– 创建目录(两端):
create directory xdump as ‘/public/xdump’;
create directory xdump as ‘/public/xdump’;

–expdp 导出:
nohup expdp system/oracle schemas=JINGYU,LUDAN directory=xdump dumpfile=db1_zs_SCHEMA_%U.dmp logfile=expdp_db1_zs_SCHEMA.log PARALLEL=4 cluster=n &

–impdp 导入:
nohup impdp system/oracle schemas=JINGYU,LUDAN directory=xdump REMAP_TABLESPACE=DBS_D_JINGYU:USERS,DBS_I_JINGYU:USERS,TEMP_JINGYU:TEMP table_exists_action=replace dumpfile=db1_zs_SCHEMA_%U.dmp logfile=impdp_db1_zs_SCHEMA.log parallel=4 cluster=n &

4. 正式迁移过程

正式迁移需要做的事情:

  • 4.1 锁定迁移的业务用户
  • 4.2 杀掉业务会话
  • 4.3 关闭 job 分别在两端
  • 4.4 源端导出并传送
  • 4.5 目标端准备并导入
  • 4.6 创建 public 对象
  • 4.7 解锁业务用户
  • 4.8 目标端开启 job
  • 4.9 配合应用测试

–4.1 锁定迁移的业务用户
alter user JINGYU account lock;
alter user LUDAN account lock;

–4.2 杀掉业务会话
select * from v$session where username in (‘JINGYU’,’LUDAN’);
select ‘alter system kill session ”’ || sid || ‘,’ || SERIAL# || ”’;’ from v$session where username in (‘JINGYU’,’LUDAN’);
ps -ef|grep LOCAL=NO|grep -v grep|xargs kill -9

–4.3 关闭 job 分别在两端
show parameter job_queue_process
SYS >alter system set job_queue_processes=0;

–4.4 源端导出并传送
nohup expdp system/oracle schemas=JINGYU,LUDAN directory=xdump dumpfile=db1_zs_SCHEMA_%U.dmp logfile=expdp_db1_zs_SCHEMA.log PARALLEL=4 cluster=n &

– 4.6 创建 public 对象
根据查询的 public 对象,直接创建即可。

– 4.7 解锁业务用户
在迁移升级失败,遭遇不可抗力,最终导致环境确实需要回退时才可以。
alter user JINGYU account unlock;
alter user LUDAN account unlock;

– 4.8 目标端开启 job
SYS >alter system set job_queue_processes=1000;

– 4.9 配合应用测试

延伸 MOS 文档:

  • Oracle Server – Export DataPump and Import DataPump FAQ (文档 ID 556636.1)

更多 Oracle 相关信息见Oracle 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=12

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4052字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中