这期内容为使用expdp/impdp进行迁移的一般步骤

分为如下五个部分:

  1. 源库环境确认
  2. 目标端操作
  3. 源库端导出数据
  4. 目标端导入数据
  5. 事后检查

1.源库环境确认

1.1 查看数据库用户

SQL>select * from dba_users;
select * from dba_sys_privs where grantee='ASRS_ZHL_DT_1'; 
select * from dba_role_privs where grantee='ASRS_ZHL_DT_1'; 
select * from dba_tab_privs where grantee='ASRS_ZHL_DT_1' ;
9.jpg

1.2 查看数据库角色

SQL>select * from dba_roles;
10.jpg

1.3 查看数据库表空间

SQL>select * from  dba_tablespaces;
11.jpg

1.4 查看物化视图

SQL>select * from dba_mviews;
12.jpg

1.5 查看物化视图日志

SQL>select * from dba_mview_logs;
13.jpg

1.6 查看job及scheduler

SQL>select * from dba_jobs;
SQL>select * from dba_scheduler_jobs;
14.jpg

1.7 查看dblink

SQL>select * from dba_db_links;
15.jpg

1.8 查看其他数据库有无关联

这里查看环境中其他数据库的dblink是否和该数据库有关联

1.9 查看是否有目录

select * from dba_directories

1.10检查同义词

2. 目标端操作

2.1 建立表空间

SQL>CREATE SMALLFILE TABLESPACE "EMAPTBS" DATAFILE  SIZE 25G LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

SQL>ALTER TABLESPACE "EMAPTBS" ADD DATAFILE  SIZE 25G;

具体查看: 表空间的日常运维命令

2.2 建立角色

没有需要建立的角色

2.3 建立用户和权限

SQL>create user emap identified by emap default tablespace emaptbs ;
SQL>create user emaptest identified by emaptest default tablespace emaptbs;

SQL>grant connect,resource to emap;
SQL>grant connect,resource to emaptest;

SQL>grant select on v_$session to emap;
SQL>grant select on v_$session to emaptest;

SQL>grant unlimited tablespace to emap;
SQL>grant unlimited tablespace to emaptest;

2.4 建立dblink(只需建立public用户的)

create public database link MESASSY
connect to username IDENTIFIED BY password
using '(description=(address=(protocol=TCP)
(host=10.65.1.113)(port=1521))(connect_data=(SERVICE_NAME = MESASSY)))';

3. 源库端导出数据

这里使用sys账号进行

3.1 查看数据库目录信息

SQL>select * from dba_directories;

3.2 建立新的目录用于存放导出文件

SQL>CREATE OR REPLACE DIRECTORY dump_dir AS '/oradata/dump';

3.3 导出emap/emaptest用户数据

导出前锁定emap/emaptest账号

SQL>alter user emap acccount lock;
SQL>alter user emaptest account lock;

注意oracle 11.2.0.1 之后空表如没有数据则会不导出

请事先找出这些表

新建parfile:expdp_emap.txt

userid='sys/ase_sys_1 as sysdba'
job_name=job_emp_emptest_exp
directory=dump_dir
filesize=15G
dumpfile=expdp_emap_%U.dmp
logfile=emp_emptest_expdp.log
schemas=emap,emaptest
parallel=4
content=all

3.4 导出数据

expdp parfile=expdp_emap.txt

4. 目标端导入数据

4.1 查看数据库目录信息

SQL>select * from dba_directories

4.2 建立新的目录用于存放导出文件

SQL>CREATE OR REPLACE DIRECTORY dump_dir AS '/oradata/dump/';

4.3 拷贝expdp文件至该目录

scp expdp_emp_0* oracle@10.65.202.201:/oradata/dump/

4.4 导入emap/emaptest用户数据

新建parfile:impdp_emap.txt

userid='sys/ase_password as sysdba'
job_name=job_emp_emptest_imp
directory=dump_dir
dumpfile=expdp_emap_%U.dmp
logfile=emp_emptest_impdp.log
schemas=emap,emaptest
parallel=4
content=all

导入数据

impdp parfile=exp_emap.txt

收集统计信息

exec dbms_stats.gather_database_stats();

5. 事后检查

5.1 检查对象是否迁移完成

参见Python脚本

Python程序数据库迁移比对小工具

5.2 检查对象是否失效

  • 检查如下对象是否失效

  • 物化视图

  • Job及scheduler

  • Procedure

  • Package等等

5.2 新环境参数检查

检查如下参数是否和源库一致或设置合理(不保证全面)

  • sga

  • pga

  • PROCESSES

  • SESSIONS

  • case_sensitive

  • deffer_creation_segement

  • open_cursor

  • job_queue_processes