無外網Oracle資料庫遷移
資料庫遷移有多種方法可以實現,在有網路的情況下可以通過工具實現資料庫遷移,簡單穩定高效,而且停機時間可以控制在很短的時間甚至不需要停機。但是當沒有外網的情況下就方式就比較少了,下面介紹通過Rman備份恢復的方式來遷移Oracle資料庫,將停機時間最小化。
一、收集源庫資訊
1、檢視當前資料庫的實際大小
select sum(a.bytes - b.bytes)/1024/ 1024 "sum_used MB"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name;
2、檢視資料庫安裝目錄
①通過.bash_profile檢視ORACLE_SID、ORACLE_HOME、ORACLE_BASE的路徑
②檢視源資料庫的審計檔案目錄
show parameter audit
③檢視控制檔案的路徑和數量、資料檔案的路徑
控制檔案:show parameter control
資料檔案:select name from v$datafile;
④檢視是否開啟閃回區,如果開啟檢視對應路徑和大小
show parameter recover
⑤檢視歸檔檔案路徑
show parameter log_archive_dest
⑥檢視資料庫伺服器記憶體,目標例項配置要大於等於這個配置,否則在還原引數檔案時可能會出現SGA不夠的情況
檢視伺服器記憶體:grep MemTotal /proc/meminfo
檢視SGA大小:show parameter sga
二、準備目標伺服器環境
根據上面源庫的資訊安裝Oracle軟體(不需要dbca建立資料庫),需要注意的是要提前建立審計目錄,在建立的時候要和源庫查詢出來的目錄一致,同時歸檔日誌目錄、資料檔案目錄、閃回區的目錄也一併建立完成。
三、遷移資料庫
在環境全部準備完成後,開始準備遷移資料庫。遷移的策略為:遷移開始–全備–傳輸–恢復–增量備份–傳輸–增量恢復–增量歸檔恢復–關閉資料庫–拷貝redolog–完全恢復–遷移結束。
1、源庫進行0級全量備份
[oracle@vbox66 ~]$ rman target /
恢復管理器: Release 11.2.0.4.0 - Production on 星期六 9月 15 15:54:15 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已連線到目標資料庫: VBOX66DB (DBID=3269052407)
RMAN> run {
2> allocate channel c1 device type disk;
3> allocate channel c2 device type disk;
4> allocate channel c3 device type disk;
5> backup incremental level 0 database format `/u01/backup/all_db_%U.bak`;
6> }
具體選擇channel可以根據資料庫表空間的大小和數量,此時檢視下當前資料庫的日誌資訊,以便之後拷貝增量日誌。
2、通過中間介質傳輸到目標伺服器進行恢復
①這裡我通過scp來代替中間介質傳輸
目標庫
scp 192.168.3.66:/u01/backup/* ./
②全備檔案傳輸完成後首先還原引數檔案
a、首先建立一個啞參,目標資料庫啟動到nomount狀態,登入Rman恢復源庫spfile
cd $ORACLE_HOME
cd dbs
vi ceshi.ora
db_name=`aaa`
sqlplus / as sysdba
startup nomount pfile=`/u01/app/oracle/product/11.2.0/db_1/dbs/ceshi.ora`
b、從全備檔案中還原引數檔案
RMAN> restore spfile to `/u01/app/oracle/product/11.2.0/db_1/dbs/spfilevbox66in.ora` from `/u01/backup/all_db_1rtd6bac_1_1.bak`;
啟動 restore 於 2018-09-15 17:44:06
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 裝置型別=DISK
通道 ORA_DISK_1: 正在從 AUTOBACKUP /u01/backup/all_db_1rtd6bac_1_1.bak 還原 spfile
通道 ORA_DISK_1: 從 AUTOBACKUP 還原 SPFILE 已完成
完成 restore 於 2018-09-15 17:44:08
RMAN>
spfile在那個備份集中可以在源庫Rman中執行list backup進行檢視
③、目標例項在還原完引數檔案之後還原控制檔案
a、在還原控制檔案之間先將以ceshi.ora引數檔案啟動的例項關閉,以還原的引數檔案啟動到nomount進行還原控制檔案
shutdown immediate;
exit;
sqlplus / as sysdba
startup nomount;
b、還原控制檔案
RMAN> restore controlfile from `/u01/backup/all_db_1qtd6b8b_1_1.bak`;
啟動 restore 於 2018-09-15 17:51:15
使用目標資料庫控制檔案替代恢復目錄
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 裝置型別=DISK
通道 ORA_DISK_1: 正在還原控制檔案
通道 ORA_DISK_1: 還原完成, 用時: 00:00:03
輸出檔名=/u01/app/oracle/oradata/vbox66db/control01.ctl
輸出檔名=/u01/app/oracle/oradata/vbox66db/control02.ctl
完成 restore 於 2018-09-15 17:51:19
RMAN>
④、控制檔案還原完成之後開始還原全備資料檔案
a、控制檔案還原完成將資料庫啟動到mount狀態
SYS@vbox66in>alter database mount;
b、還原資料檔案
先將備份集註冊到控制檔案中
RMAN> catalog start with `/u01/backup`;
使用目標資料庫控制檔案替代恢復目錄
搜尋與樣式 /u01/backup 匹配的所有檔案
資料庫未知檔案的列表
=====================================
檔名: /u01/backup/all_db_1rtd6bac_1_1.bak
檔名: /u01/backup/all_db_1qtd6b8b_1_1.bak
檔名: /u01/backup/all_db_1otd6b7h_1_1.bak
檔名: /u01/backup/all_db_1ntd6b7g_1_1.bak
是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? yes
正在編制檔案目錄...
目錄編制完畢
已列入目錄的檔案的列表
=======================
檔名: /u01/backup/all_db_1rtd6bac_1_1.bak
檔名: /u01/backup/all_db_1qtd6b8b_1_1.bak
檔名: /u01/backup/all_db_1otd6b7h_1_1.bak
檔名: /u01/backup/all_db_1ntd6b7g_1_1.bak
開始還原資料檔案:
RMAN> restore database;
啟動 restore 於 2018-09-15 17:57:01
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=17 裝置型別=DISK
通道 ORA_DISK_1: 正在開始還原資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案
通道 ORA_DISK_1: 將資料檔案 00006 還原到 /u01/app/oracle/oradata/vbox66db/testdb01.dbf
通道 ORA_DISK_1: 將資料檔案 00007 還原到 /u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
通道 ORA_DISK_1: 將資料檔案 00008 還原到 /u01/app/oracle/oradata/vbox66db/oggtbs.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/backup/all_db_1ptd6b7h_1_1.bak
通道 ORA_DISK_1: 段控制程式碼 = /u01/backup/all_db_1ptd6b7h_1_1.bak 標記 = TAG20180915T155528
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:00:35
通道 ORA_DISK_1: 正在開始還原資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案
通道 ORA_DISK_1: 將資料檔案 00001 還原到 /u01/app/oracle/oradata/vbox66db/system01.dbf
通道 ORA_DISK_1: 將資料檔案 00004 還原到 /u01/app/oracle/oradata/vbox66db/users01.dbf
通道 ORA_DISK_1: 將資料檔案 00009 還原到 /u01/app/oracle/oradata/vbox66db/migtbs.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/backup/all_db_1otd6b7h_1_1.bak
通道 ORA_DISK_1: 段控制程式碼 = /u01/backup/all_db_1otd6b7h_1_1.bak 標記 = TAG20180915T155528
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:01:15
通道 ORA_DISK_1: 正在開始還原資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案
通道 ORA_DISK_1: 將資料檔案 00002 還原到 /u01/app/oracle/oradata/vbox66db/sysaux01.dbf
通道 ORA_DISK_1: 將資料檔案 00003 還原到 /u01/app/oracle/oradata/vbox66db/undotbs01.dbf
通道 ORA_DISK_1: 將資料檔案 00005 還原到 /u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/backup/all_db_1ntd6b7g_1_1.bak
通道 ORA_DISK_1: 段控制程式碼 = /u01/backup/all_db_1ntd6b7g_1_1.bak 標記 = TAG20180915T155528
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:01:45
完成 restore 於 2018-09-15 18:00:37
RMAN>
3、對源庫進行1級增量備份
①此次為模擬,在全備之後在源庫進行操作模擬正常資料庫工作
SYS@vbox66in>create table scott.gaowen(id int,name varchar(30));
SYS@vbox66in>insert into scott.gaowen values(1,`aaa`);
SYS@vbox66in>insert into scott.gaowen values(2,`bbb`);
SYS@vbox66in>insert into scott.gaowen values(3,`ccc`);
SYS@vbox66in>commit;
SYS@vbox66in>alter system archive log current;
系統已更改。
SYS@vbox66in>alter system archive log current;
系統已更改。
SYS@vbox66in>alter system archive log current;
系統已更改。
SYS@vbox66in>
②進行1級增量備份
RMAN> backup incremental level 1 database format `/u01/backup/incr_db_%U.bak`;
啟動 backup 於 15-9月 -18
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在啟動增量級別 1 資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
輸入資料檔案: 檔案號=00002 名稱=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
輸入資料檔案: 檔案號=00001 名稱=/u01/app/oracle/oradata/vbox66db/system01.dbf
輸入資料檔案: 檔案號=00008 名稱=/u01/app/oracle/oradata/vbox66db/oggtbs.dbf
輸入資料檔案: 檔案號=00006 名稱=/u01/app/oracle/oradata/vbox66db/testdb01.dbf
輸入資料檔案: 檔案號=00007 名稱=/u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
輸入資料檔案: 檔案號=00009 名稱=/u01/app/oracle/oradata/vbox66db/migtbs.dbf
輸入資料檔案: 檔案號=00003 名稱=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
輸入資料檔案: 檔案號=00004 名稱=/u01/app/oracle/oradata/vbox66db/users01.dbf
輸入資料檔案: 檔案號=00005 名稱=/u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在啟動段 1 於 15-9月 -18
通道 ORA_DISK_1: 已完成段 1 於 15-9月 -18
段控制程式碼=/u01/backup/incr_db_1std6jag_1_1.bak 標記=TAG20180915T181335 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:01:35
通道 ORA_DISK_1: 正在啟動增量級別 1 資料檔案備份集
通道 ORA_DISK_1: 正在指定備份集內的資料檔案
備份集內包括當前控制檔案
備份集內包括當前的 SPFILE
通道 ORA_DISK_1: 正在啟動段 1 於 15-9月 -18
通道 ORA_DISK_1: 已完成段 1 於 15-9月 -18
段控制程式碼=/u01/backup/incr_db_1ttd6jdf_1_1.bak 標記=TAG20180915T181335 註釋=NONE
通道 ORA_DISK_1: 備份集已完成, 經過時間:00:00:01
完成 backup 於 15-9月 -18
RMAN>
4、通過中間介質將增量備份傳輸到目標例項進行恢復
①這裡通過scp來模擬代替中間介質傳輸
scp 192.168.3.66:/u01/backup/inc* ./
②還原增量備份
a、先將備份集註冊到控制檔案中
RMAN> catalog start with `/u01/backup`;
搜尋與樣式 /u01/backup 匹配的所有檔案
資料庫未知檔案的列表
=====================================
檔名: /u01/backup/incr_db_1std6jag_1_1.bak
檔名: /u01/backup/incr_db_1ttd6jdf_1_1.bak
是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? yes
正在編制檔案目錄...
目錄編制完畢
已列入目錄的檔案的列表
=======================
檔名: /u01/backup/incr_db_1std6jag_1_1.bak
檔名: /u01/backup/incr_db_1ttd6jdf_1_1.bak
RMAN>
b、恢復增量備份
RMAN> catalog start with `/u01/backup`;
搜尋與樣式 /u01/backup 匹配的所有檔案
資料庫未知檔案的列表
=====================================
檔名: /u01/backup/incr_db_1std6jag_1_1.bak
檔名: /u01/backup/incr_db_1ttd6jdf_1_1.bak
是否確實要將上述檔案列入目錄 (輸入 YES 或 NO)? yes
正在編制檔案目錄...
目錄編制完畢
已列入目錄的檔案的列表
=======================
檔名: /u01/backup/incr_db_1std6jag_1_1.bak
檔名: /u01/backup/incr_db_1ttd6jdf_1_1.bak
RMAN> recover database;
啟動 recover 於 2018-09-15 18:22:01
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在開始還原增量資料檔案備份集
通道 ORA_DISK_1: 正在指定從備份集還原的資料檔案
資料檔案 00001 的還原目標: /u01/app/oracle/oradata/vbox66db/system01.dbf
資料檔案 00002 的還原目標: /u01/app/oracle/oradata/vbox66db/sysaux01.dbf
資料檔案 00003 的還原目標: /u01/app/oracle/oradata/vbox66db/undotbs01.dbf
資料檔案 00004 的還原目標: /u01/app/oracle/oradata/vbox66db/users01.dbf
資料檔案 00005 的還原目標: /u01/app/oracle/oradata/vbox66db/test01.dbf
資料檔案 00006 的還原目標: /u01/app/oracle/oradata/vbox66db/testdb01.dbf
資料檔案 00007 的還原目標: /u01/app/oracle/oradata/vbox66db/JRJCTEST.dbf
資料檔案 00008 的還原目標: /u01/app/oracle/oradata/vbox66db/oggtbs.dbf
資料檔案 00009 的還原目標: /u01/app/oracle/oradata/vbox66db/migtbs.dbf
通道 ORA_DISK_1: 正在讀取備份片段 /u01/backup/incr_db_1std6jag_1_1.bak
通道 ORA_DISK_1: 段控制程式碼 = /u01/backup/incr_db_1std6jag_1_1.bak 標記 = TAG20180915T181335
通道 ORA_DISK_1: 已還原備份片段 1
通道 ORA_DISK_1: 還原完成, 用時: 00:00:15
正在開始介質的恢復
無法找到歸檔日誌
歸檔日誌執行緒=1 序列=56
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/15/2018 18:22:19 上) 失敗
RMAN-06054: 介質恢復正在請求未知的執行緒 1 序列 56 的歸檔日誌以及起始 SCN 2027595
RMAN>
從恢復的資訊中我們可以看到資料沒有完全恢復,需要增量歸檔日誌檔案。接下來需要將全備之後生成的增量日誌傳輸到目標例項
5、傳輸源庫增量日誌到目標例項進行資料恢復
①從增量恢復資訊中我們可以看到需要56號歸檔日誌,那麼就需要將56號之後的歸檔日誌傳輸到目標例項,我這裡通過scp代替中間介質
scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_56_974146828.dbf ./
scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_57_974146828.dbf ./
scp 192.168.3.66:/u01/app/oracle/oradata/arch/1_58_974146828.dbf ./
②進行增量日誌恢復
RMAN> recover database;
啟動 recover 於 2018-09-15 18:33:38
使用通道 ORA_DISK_1
正在開始介質的恢復
歸檔日誌檔名=/u01/app/oracle/oradata/arch/1_56_974146828.dbf 執行緒=1 序列=56
歸檔日誌檔名=/u01/app/oracle/oradata/arch/1_57_974146828.dbf 執行緒=1 序列=57
歸檔日誌檔名=/u01/app/oracle/oradata/arch/1_58_974146828.dbf 執行緒=1 序列=58
無法找到歸檔日誌
歸檔日誌執行緒=1 序列=59
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 09/15/2018 18:33:39 上) 失敗
RMAN-06054: 介質恢復正在請求未知的執行緒 1 序列 59 的歸檔日誌以及起始 SCN 2040040
RMAN>
從增量日誌恢復資訊中可以看到還需要59號日誌檔案,如果此時59號檔案就是當前redo log檔案的話就關閉源例項資料庫,將redo file檔案拷貝到目標例項進行恢復,如果不是那就重複上訴步驟直到是redo file檔案為止,這樣就可以最小化停機時間。
③由於這裡是模擬,59號檔案就是當前redo file,現在關閉遠視力資料庫進行拷貝redo file檔案到目標例項
a、源例項關閉資料庫
shutdown immediate;
b、將當前redo file傳輸到目標例項
scp 192.168.3.66:/u01/app/oracle/oradata/vbox66db/redo* ./
6、當redo file拷貝完成後進行最後的恢復資料庫
①進行恢復資料庫
RMAN> recover database;
啟動 recover 於 2018-09-15 18:42:00
使用通道 ORA_DISK_1
正在開始介質的恢復
執行緒 1 序列 59 的歸檔日誌已作為檔案 /u01/app/oracle/oradata/vbox66db/redo02.log 存在於磁碟上
歸檔日誌檔名=/u01/app/oracle/oradata/vbox66db/redo02.log 執行緒=1 序列=59
介質恢復完成, 用時: 00:00:00
完成 recover 於 2018-09-15 18:42:01
RMAN>
②以resetlogs方式開啟資料庫
SYS@vbox66in>alter database open resetlogs;
資料庫已更改。
SYS@vbox66in>
③檢視之前建立的表資料
SYS@vbox66in>select * from scott.gaowen;
ID NAME
---------- ------------------------------
1 aaa
2 bbb
3 ccc
SYS@vbox66in>
7、重建臨時表空間
由於備份恢復時不備份臨時表空間,所以還原之後臨時表空間檔案就沒有,需要重建。
SYS@vbox66in>create temporary tablespace temp2 tempfile `/u01/app/oracle/oradata/vbox66db/temp02.dbf` size 10M autoextend on;
SYS@vbox66in>alter database default temporary tablespace temp2;
SYS@vbox66in>drop tablespace temp including contents and datafiles;
SYS@vbox66in>create temporary tablespace temp tempfile `/u01/app/oracle/oradata/vbox66db/temp01.dbf` size 10M autoextend on;
SYS@vbox66in>alter database default temporary tablespace temp;
SYS@vbox66in>drop tablespace temp2 including contents and datafiles;
至此資料庫遷移完畢!
相關文章
- Oracle資料庫(資料泵)遷移方案(上)Oracle資料庫
- Oracle資料庫(資料泵)遷移方案(下)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(上)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- Oracle資料庫(DataGuard)遷移方案(下)Oracle資料庫
- Oracle 19c adg全庫遷移資料Oracle
- 資料庫遷移資料庫
- Oracle資料庫中資料行遷移與行連結Oracle資料庫
- AWS RDS Oracle資料遷移Oracle
- elasticdump資料遷移與內外網安裝AST
- redis資料庫遷移Redis資料庫
- 資料庫遷移 :理解資料庫
- laravel資料庫遷移Laravel資料庫
- Oracle資料庫升級或資料遷移的方法探討Oracle資料庫
- 異構資料庫資料遷移 oracle to mysql之oracle sqlloader和mysql load data資料庫OracleMySql
- linux mysql資料庫遷移LinuxMySql資料庫
- django資料庫遷移-15Django資料庫
- 用rman遷移資料庫資料庫
- 資料庫遷移手記資料庫
- 遷移MySQL 5.7資料庫MySql資料庫
- 資料庫遷移神器——Flyway資料庫
- dm資料庫遷移命令資料庫
- SQL Server資料庫遷移SQLServer資料庫
- Oracle資料庫遷移至PolarDb(阿里雲資料庫)Oracle資料庫阿里
- 雲資料庫管理與資料遷移資料庫
- dnf資料庫備份&遷移資料庫
- OGG資料庫遷移方案(一)資料庫
- OGG資料庫遷移方案(二)資料庫
- OGG資料庫遷移方案(三)資料庫
- OGG資料庫遷移方案(四)資料庫
- 資料庫邏輯遷移方案資料庫
- 遷移Oracle資料庫時如何減小停機時間AAOracle資料庫
- oracle RAC 更換儲存遷移資料Oracle
- 遷移資料庫資料考慮問題資料庫
- 亞馬遜宣佈永久關閉 Oracle 資料庫:已完成遷移亞馬遜Oracle資料庫
- Win環境至Linux環境Oracle資料庫遷移全過程LinuxOracle資料庫
- Laravel migration (資料庫遷移) 的使用Laravel資料庫
- 騰訊雲 雲資料庫遷移資料庫