1.確定基本信息
確定基本信息: ``` 源數據庫所在系統類型:________ 源數據庫地址:__.__.__.__ 源數據庫版本:________ 數據庫高可用/災備:{單機|RHCS|RAC|DataGuard|其他} 遷移導出業務用戶:________目的數據庫所在系統類型:________
目的數據庫地址:...
目的數據庫版本:________
數據庫高可用/災備:{單機|RHCS|RAC|DataGuard|其他}
遷移導入業務用戶:________
按上面模板填好必要信息,示例如下:
源數據庫所在系統類型:RHEL 6.4
源數據庫地址:192.168.XX.XX
源數據庫版本:9.2.0.8.0
數據庫高可用/災備:單機
遷移導出業務用戶:jingyu
目的數據庫所在系統類型:RHEL 6.4
目的數據庫地址:192.168.XX.XX
目的數據庫版本:11.2.0.4.0
數據庫高可用/災備:RAC
遷移導入業務用戶:jingyu
<h1 id="2">2.源數據庫導出</h1>
## 2.1 業務用戶相關信息 ##
--用戶默認數據表空間,臨時表空間
select * from dba_users where username='JINGYU';
--連接到業務用戶
conn jingyu/jingyu
--用戶角色權限
select * from user_role_privs;
--用戶總的對象數量
select count(1) from user_objects;
--用戶總的表數量
select count(1) from user_tables;
## 2.2 用戶用到的表空間 ##
--連接到業務用戶
conn jingyu/jingyu
--用戶用到的表空間
select tablespace_name from user_tables union
select tablespace_name from user_tab_partitions union
select tablespace_name from user_indexes union
select tablespace_name from user_ind_partitions;
## 2.3 查詢對應表空間數據文件情況 ##
--數據表空間對應數據文件信息
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU');
--數據表空間對應數據文件按表空間分組統計總大小
select TABLESPACE_NAME, sum(BYTES/1024/1024) "MB" from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU') group by TABLESPACE_NAME;
--臨時表空間對應臨時文件信息
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_temp_files where TABLESPACE_NAME='TEMP_JINGYU';
--臨時表空間對應臨時文件統計總大小
select sum(BYTES/1024/1024) "MB" from dba_temp_files where TABLESPACE_NAME='TEMP_JINGYU';
## 2.4 選擇合適的導出方案 ##
--導出方案exp示例(10g之前版本使用)
nohup exp jingyu/jingyu OWNER=jingyu BUFFER=10240000 STATISTICS=none RESUMABLE=y FILE=jingyu_exp.dmp LOG=jingyu_exp.log &
--導出方案expdp示例(10g及以后版本建議使用數據泵expdp)
nohup expdp system directory=jy schemas=jingyu dumpfile=jingyu_all%U.dmp logfile=jingyu_all.log parallel=2 &
有關expdp詳細內容可參考:
- 《[Oracle簡單常用的數據泵導出導入(expdp/impdp)命令舉例(上)](http://www.cnblogs.com/jyzhao/p/4522868.html)》
<h1 id="3">3.目的數據庫導入</h1>
## 3.1 目的數據庫當前相關信息 ##
--確定目的數據庫基本信息
select instance_name, status from v$instance;
select dbid, open_mode from v$database;
--確定ASM磁盤組剩余空間
select GROUP_NUMBER, NAME, TYPE, TOTAL_MB, FREE_MB, USABLE_FILE_MB from v$asm_diskgroup;
--如果是文件系統管理,直接df -g查看數據文件存放目錄的空間
--確定已有表空間數據文件情況
select FILE_ID, FILE_NAME, TABLESPACE_NAME, BYTES/1024/1024 "MB", MAXBYTES/1024/1024/1024 "GB", AUTOEXTENSIBLE, STATUS from dba_data_files where TABLESPACE_NAME in ('SYSTEM', 'USERS', 'DBS_D_JINGYU', 'DBS_I_JINGYU');
## 3.2 導入前准備 ##
--1. 創建新表空間
create tablespace DBS_D_JINGYU datafile '+DATA01';
create temporary tablespace TEMP_JINGYU tempfile '+DATA01';
--此步驟還需要確定是否需要創建其他表空間,確定是否需要建多個數據文件
--2. 創建用戶
create user jingyu identified by jingyu TEMPORARY TABLESPACE TEMP_JINGYU default tablespace DBS_D_JINGYU;
--3. 賦予用戶權限
grant resource, connect, dba to jingyu;
## 3.3 導入方案 ##
--導入方案的選擇由之前導出方案決定:exp/imp,expdp/impdp。
--導入方案imp示例
nohup imp jingyu/jingyu BUFFER=10240000 RESUMABLE=y FILE=jingyu_exp.dmp LOG=imp_jingyu_exp.log IGNORE=y FULL=y &
--導入方案impdp示例
nohup impdp system directory=jy schemas=jingyu table_exists_action=replace dumpfile=jingyu_all%U.dmp logfile=impdp_jingyu_all.log parallel=2 &
有關impdp詳細內容可參考:
- 《[Oracle簡單常用的數據泵導出導入(expdp/impdp)命令舉例(下)](http://www.cnblogs.com/jyzhao/p/4530575.html)》
<h1 id="4">4.邏輯遷移注意事項</h1>
**4.1 如果需要保證業務數據前后一致性**
那么在導出開始前,需要停止源數據庫業務,直到成功導入到目標數據庫時,應用修改新的連接方式完畢,才可以再次啟動業務;
**4.2 如果之前表空間管理不規范**
早期imp導入工具還沒有顯示指定重定向表空間的功能,建議整改后遷移;后來impdp才引入重定向表空間的功能,導入時直接使用REMAP_TABLESPACE參數。
**對於更復雜的邏輯遷移場景可參考:**
- 《[Oracle數據邏輯遷移綜合實戰篇](http://www.cnblogs.com/jyzhao/p/4583722.html)》
