最近在做一個RAC升級測試11.2.0.1升級到11.2.0.4,為保證業務能在11.2.0.4版本下正常運行,現需要將資料庫還原至11.2.0.4的單機環境下,資料庫大小為1.04T左右,在這裡總結下步驟。 環境簡介: 1.本次試驗的環境為11.2.0.4的單機環境,存儲為Windows NTFS ...
最近在做一個RAC升級測試11.2.0.1升級到11.2.0.4,為保證業務能在11.2.0.4版本下正常運行,現需要將資料庫還原至11.2.0.4的單機環境下,資料庫大小為1.04T左右,在這裡總結下步驟。
環境簡介:
1.本次試驗的環境為11.2.0.4的單機環境,存儲為Windows NTFS文件系統,系統版本為Windows server 2008R2企業版。
2.備份來自一個雙節點的RAC環境,操作系統同為Windows Server 2008R2,存儲為ASM磁碟組。
3.RAC環境下文件總大小為1.04T,備份集大小為290G左右。
還原步驟:
1.將備份集拷貝至測試環境。
環境中D盤中安裝有Oracle11.2.0.4版本的資料庫,安裝了預設的orcl實例,實例處於關閉狀態。
本次將備份集拷貝至目錄'D:\backup\'下。
2.在E盤中新建oradata目錄,路徑為'E:\oradata'。
E盤空間大小為1.5T,用於存放本次的數據文件,新建archive目錄用於存放歸檔日誌。
3.創建實例並強制啟動到nomount狀態。
oradim -new -sid leo --創建了實例名為leo的windows服務
set oracle_sid=leo --設置當前視窗環境變數
rman target /
startup nomount force --強制啟動到nomount狀態以便進行spfile的恢復
4.RMAN中還原spfile。
在備份集中找到最小的幾個文件,逐一嘗試恢復spfile直到成功恢復,當然如果主庫正常可以到主庫伺服器上進入RMAN執行list backup of spfile進行快速識別,圖省事可以一個個試。
restore spfile from 'D:\backup\xxx';--恢復spfile
startup nomount force;
5.生成pfile並刪除RAC相關參數。
create pfile='D:\pfileleo.txt' from spfile;
刪除其中所有的RAC相關參數,同時將audit_file_dest設置為D盤oracle安裝目錄下的adump目錄,並制定log_archive_dest_1的值為E:\archive,此外修改控制文件位置為E:\oradata\control01.ctl,E:\oradata\control02.ctl後保存。
6.使用新的pfile啟動到nomount狀態。
startup force pfile='D:\pfileleo.txt';
7.RMAN恢復控制文件。
restore controlfile from 'D:\backup\xxx';--xxx為時間最晚的控制文件備份
alter database mount;
8.RMAN註冊備份集並恢複數據庫。
catalog start with 'D:\backup\';--後繼輸入yes即可
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
allocate channel c6 type disk;
allocate channel c7 type disk;
allocate channel c8 type disk;
set newname for datafile 1 to 'E:\oradata\xxx.dbf';
set newname for datafile 2 to 'E:\oradata\xxx.dbf';
set newname for datafile 3 to 'E:\oradata\xxx.dbf';
set newname for datafile 4 to 'E:\oradata\xxx.dbf';
set newname for datafile 5 to 'E:\oradata\xxx.dbf';
set newname for datafile 6 to 'E:\oradata\xxx.dbf';
set newname for datafile 7 to 'E:\oradata\xxx.dbf';
set newname for datafile 8 to 'E:\oradata\xxx.dbf';
...有多少個數據文件加幾個set newname語句。
restore database;
switch datafile all;
}
在這裡可以使用如下類似SQL在原庫生成set newname的語句:
select 'set newname for datafile '||file_id||' to '||'E:\oradata\'||substr(file_name,xxx) as "SQL" from dba_data_files;--xxx的大小取決於文件目錄的長度。
註意要把路徑''括起來再執行,以上生成的語句不帶'號。
9.Recover資料庫。
Restore之後接下來需要進行Recover,選擇的恢復終點如下:
1)通過list archivelog all命令找到歸檔日誌的備份,找到每個thread的sequence值最大的備份集,記錄下其next scn號及sequence值,假設分別為seq1 scn1和seq2 scn2。
2)比較scn1和scn2選擇其中較小的作為本次恢復終點,假設本次較小者為scn1,其對應seq1的序列號。
run {
set until sequence seq1 thread 1;
recover database;
}
10.修改所有redo文件的目錄
Alter database rename file '+DATA/xxx/onlinelog/redo01.log' to 'E:\oradata\redo01.log';--有多少個redo文件執行多少次。
...
11.以upgrade模式打開資料庫。
shutdown immediate;
startup upgrade;
12.刪除原臨時文件組並新建。
create temporary tablespace TEMP1 tempfile dbfE:\temp01.b' size 2048M;
alter database default temporary tablespace TEMP1;
drop tablespace TEMP;
13.重新以upgrade模式打開資料庫並執行升級腳本。
shutdown immediate;
startup upgrade;
sqlplus / as sysdba
>@?/rbdms/admin/catupgrd.sql
14.升級完畢後重啟資料庫。
shutdown immediate;
startup
註意升級完畢後可能會出現賬號密碼不正確的情況,手動修改吧。