这期内容为使用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' ;
```


[image:30 size:orig]




**1.2 查看数据库角色**

```
SQL>select * from dba_roles;
```


[image:31 size:orig]

**1.3 查看数据库表空间**

```
SQL>select * from  dba_tablespaces;
```


[image:32 size:orig]

**1.4 查看物化视图**

```
SQL>select * from dba_mviews;
```


[image:33 size:orig]

**1.5 查看物化视图日志**

```
SQL>select * from dba_mview_logs;
```


[image:34 size:orig]

**1.6 查看job及scheduler**

```
SQL>select * from dba_jobs;
SQL>select * from dba_scheduler_jobs;
```


[image:35 size:orig]


**1.7 查看dblink**

```
SQL>select * from dba_db_links;
```


[image:36 size:orig]

**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;
```

具体查看:
[表空间的日常运维命令](http://www.zhaibibei.cn/oracle/1.1/)

**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程序数据库迁移比对小工具](http://www.zhaibibei.cn/oralce/manager/migration/)

**5.2 检查对象是否失效**

- 检查如下对象是否失效

- 物化视图 

- Job及scheduler

- Procedure

- Package等等

**5.2 新环境参数检查**

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

- sga 

- pga 

- PROCESSES 

- SESSIONS 

- case_sensitive 

- deffer_creation_segement 

- open_cursor 

- job_queue_processes