源庫:作業系統:windows 2008R2 64位系統 記憶體64g
資料庫版本:11.2.0.4 64位
目標庫:作業系統:oracle linux 6.7 64位 記憶體64g
資料庫版本:11.2.0.4 64位
說明:Oracle 在Windows下的redo 不支持在Linux進行還原,所以備份必須是冷備。
源庫操作如下:
SQL>create pfile from spfile;
##生成源庫的pfile 檔案后面能用到
SQL>shutdown immediate
###關閉源庫,沒有開啟歸檔,非歸檔模式RMAN冷備份
SQL>startup mount
##源庫啟動到mount 狀態
在mount 狀態下進行rman 冷備份
進入rman
C:\Users\Administrator>rman target/
RMAN>run{
configure controlfile autobackup off;
allocate channel c1 device type disk format 'D:\databackup\RMAN_full_backup\c1_fullbak_%d_%T_%u_%p_%s';
allocate channel c2 device type disk format 'D:\databackup\RMAN_full_backup\c2_fullbak_%d_%T_%u_%p_%s';
BACKUP AS COMPRESSED BACKUPSET DATABASE;
BACKUP CURRENT CONTROLFILE FORMAT 'D:\databackup\RMAN_controlfile\cntrl_%d_%s_%p_%T';
release channel c2;
release channel c1;
}
####備份完成
-------------------------------------------------------------------------------------------------------------
目標庫的準備作業:安裝好oracle資料庫,并創建實體,關閉資料庫后,洗掉引數檔案、控制檔案、資料檔案、聯機重做日志。
把源庫生成的pfile 檔案拷貝到目標庫的"/u01/app/oracle/product/11.2.0/dbhome_1/dbs/"路徑下
把源庫備份的控制檔案和備份集拷貝到目標庫"/rman"路徑下。
說明:也可以資料庫只安裝軟體不創建實體,為了省事,我全部都弄了。
源庫開始恢復:
[oracle@Primary dbs]$ rman target/
##進入rman
RMAN> set dbid=2235095625;
###設定dbid
RMAN>startup nomount;
##啟動到nomount狀態
RMAN>restore controlfile from '/rman/CNTRL_QLYY_109_1_20200617';
###恢復控制檔案
RMAN>sql 'alter database mount';
###打開資料庫到mount狀態
RMAN> crosscheck backup;
###核對備份資訊
RMAN> delete expired backup;
###洗掉無效備份
RMAN>catalog start with '/rman/';
##將RMAN備份檔案加入到catalog,注冊到控制檔案
RMAN>run
{
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
set newname for datafile 1 to '/u01/app/oracle/oradata/qlyy/SYSTEM01.DBF';
set newname for datafile 2 to '/u01/app/oracle/oradata/qlyy/SYSAUX01.DBF';
set newname for datafile 3 to '/u01/app/oracle/oradata/qlyy/UNDOTBS01.DBF';
set newname for datafile 4 to '/u01/app/oracle/oradata/qlyy/USERS01.DBF';
set newname for datafile 5 to '/u01/app/oracle/oradata/qlyy/ZLTOOLSTBS.DBF';
set newname for datafile 6 to '/u01/app/oracle/oradata/qlyy/ZL9BASEITEM.DBF';
set newname for tempfile 1 to '/u01/app/oracle/oradata/qlyy/TEMP01.DBF';
restore database;
switch datafile all;
switch tempfile all;
Recover database noredo;
release channel c1;
}
###重新設定資料檔案路徑,還原資料庫
RMAN>sql 'alter database open resetlogs';
##不完全恢復打開資料庫
------------------------------------------------------------------------------------------------------------
在完成恢復發現聯機重做日志沒有在默認路徑下,而在"/u01/app/oracle/product/11.2.0/dbhome_1/dbs/"路徑下,通過以下操作修改
SQL>shutdown immediate
[oracle@Primary dbs]$mv /u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO01.LOG /u01/app/oracle/oradata/qlyy/REDO01.LOG
[oracle@Primary dbs]$mv /u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO02.LOG /u01/app/oracle/oradata/qlyy/REDO02.LOG
[oracle@Primary dbs]$mv /u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO03.LOG /u01/app/oracle/oradata/qlyy/REDO03.LOG
###移動聯機重做日志并修改名稱
SQL>startup mount
##啟動到mount狀態
SQL>ALTER DATABASE RENAME FILE '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO01.LOG' to '/u01/app/oracle/oradata/qlyy/REDO01.LOG';
SQL>ALTER DATABASE RENAME FILE '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO02.LOG' to '/u01/app/oracle/oradata/qlyy/REDO02.LOG';
SQL>ALTER DATABASE RENAME FILE '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/D:ORADATAQLYYREDO03.LOG' to '/u01/app/oracle/oradata/qlyy/REDO03.LOG';
##修改聯機重做日志路徑
SQL>alter database open;
##打開資料庫
@?/rdbms/admin/utlrp.sql;
重新編譯一下無效物件
------完結---------------------
哪位大神知道恢復的時候聯機重做日志為什么沒有恢復到和資料檔案一個路徑下嗎?
各位看一下上面步驟是否還有欠缺的地方,還望指正。
uj5u.com熱心網友回復:
在使用rman跨版本(windows到linux)的資料遷移,還需要使用convert database 進行轉換嗎?請教各位大佬uj5u.com熱心網友回復:
不用
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/10018.html
標籤:高級技術
上一篇:rman windows 遷移資料到LINUX 請教
下一篇:這種SQL一般如何優化
