您好,登錄后才能下訂單哦!
本來今天請假休息了,晚上8點吃飯的時候,主管打來電話讓我恢復一個數據庫,中午12點的時候開發人員不當操作,其中一個schema用來接收其他工廠的的數據,搞亂套了。
~
讓我恢復到今天中午12點左右的數據,但是其他schema沒問題,只恢復這一個schema,這個數據庫1.7T大小,突然想到這套服務器是RAC,1節點數據泵中午12點備份,2節點是rman晚上8點備份,
吃完飯馬上去找1節點備份,-_-||發現是空的,備份腳本出問題了。
只能用rman恢復了~馬上去2節點拷貝昨天晚上的備份和昨天一天今天一天的歸檔文件,拷貝到新服務器,開始進行恢復,這相當于RAC到單節點的遷移了。
下面是操作步驟
安裝數據庫軟件·······················很快就完成了。
拷貝其他的單實例數據庫的init.ora文件, 啟動到nomunt用到
修改init文件內數據庫名和路徑位置
直接啟動
SQL>STARTUP NOMOUNT;
然后rman進入rman管理界面恢復控制文件
恢復控制文件:
RMAN>RESTORE CONTROLFILE FROM '/oradata/backup/CTCNZQF/cntrl_540843_1_962057699';
注冊備份目錄到控制文件,-----------把拷貝過來的備份文件目錄注冊到控制文件,告訴控制文件我的備份在這個目錄
RMAN> CATALOG START WITH '/oradata/backup/CTCNZQF/';
啟動數據到MOUNT;
RMAN>alter database mount;
然后開始restore 還原數據文件,但是因為我RAC用的是ASM存儲管理的,現在是本地文件,
需要修改數據文件名所以要newname一下
使用以下語句查出來所有的數據文件,改為本地文件名字
SQL>select 'SET NEWNAME FOR DATAFILE '|| file# ||' to ' ||''''|| name ||''''|| ';' from v$datafile;
然后把結果復制在文本上面,修改數據文件名字開始進行restore
RMAN>run {
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
set newname for datafile 1 to '/oradata/CTCNZQF/system01.dbf';
set newname for datafile 2 to '/oradata/CTCNZQF/sysaux02.dbf';
··························
set newname for datafile 667 to '/oradata/CTCNZQF/ctcnzjf_n648.dbf';
set newname for datafile 668 to '/oradata/CTCNZQF/farmbjhs_idx649.dbf';
restore database;
switch datafile all;
release channel d4;
release channel d3;
release channel d2;
release channel d1;
}
第一遍執行的時候報錯,并且數據文件沒有還原到指定位置,不知道原因重新執行了一遍,數據文件還原了過來。
然后開始recovery
[oracle@stat ~]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh34:mi:ss' 指定時間格式
RMAN> recover database until time '2017-12-07 12:00:56' 指定恢復到的時間
然后報錯,提示沒有歸檔
但是我歸檔已經拷貝到我寫的歸檔的目錄下了,
查了很久之后才發現,因為控制文件不知道歸檔在那里,只知道備份,如果我不回復到中午12點,直接recovery就可以恢復到昨晚8點的狀態,所以他要晚上8點到中午12點的歸檔。他找不到,,
那就注冊,吧歸檔路徑信息寫到控制文件內,沒找到怎么注冊整個歸檔目錄。只能一條條粘貼
-----注冊拷貝過來的歸檔日志到控制文件 把所有最新的拷貝過來的歸檔日志一個個注冊到控制文件內。
RMAN>catalog archivelog '/oradata/arch/CTCNZQF/thread_2_seq_92815.28569.962057619';
RMAN>···由于太多就不寫那么多了
RMAN>catalog archivelog '/oradata/arch/CTCNZQF/thread_2_seq_93639.8125.962135299';
然后重新執行
RMAN> recover database until time '2017-12-07 12:00:56';
這個圖說明正在恢復
提示已經恢復到12點6分了。說明已經恢復成功了。
然后添加日志組,修改日志組的名字,查找數據庫所有日志名字
select 'alter database rename file '''||member||q'[' to '/oradata/fast_recovery_area/CTCNZQF/redo';]' from v$logfile;
修改好名字之后 。。執行
alter database rename file '+ASM_REDO1/CTCNZQF/ONLINELOG/group_1.257.954793817' to '/oradata/fast_recovery_area/CTCNZQF/redo1';
alter database rename file '+ASM_REDO2/CTCNZQF/ONLINELOG/group_1.258.954793817' to '/oradata/fast_recovery_area/CTCNZQF/redo2';
··········
alter database rename file '+ASM_REDO1/CTCNZQF/ONLINELOG/group_24.277.955022759' to '/oradata/fast_recovery_area/CTCNZQF/redo31';
alter database rename file '+ASM_REDO2/CTCNZQF/ONLINELOG/group_24.282.955022759' to '/oradata/fast_recovery_area/CTCNZQF/redo32';
完成了~啟動數據庫
RMAN> alter database open resetlogs;
是要打開數據時,重置重做日志,即將重做日志的sequence置零
SQl>create spfile from pfile; 創建spfile文件。
然后發現alter日志里面一大串報錯·······嚇了一大跳,發下是臨時表空間,
因為恢復的時候沒有臨時文件,所以現在數據庫沒有臨時表空間,重建~~
因為控制文件記錄說已經存在了temp表空間,所以創建temp1臨時表空間,設置temp1為默認,然后刪除temp,再重新創建TEMP。設置為默認刪除temp
創建temp1表空間
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '/oradata/CTCNZQF/temp01.dbf' SIZE 1024 m
,'/oradata/CTCNZQF/temp02.dbf' SIZE 1024 m,'/oradata/CTCNZQF/temp03.dbf' SIZE 1024 m
AUTOEXTEND ON NEXT 10 m MAXSIZE UNLIMITED;
---修改臨時表空間為TEMP1
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP1;
刪除TEMP表空間,
DROP TABLESPACE temp1 INCLUDING CONTENTS AND DATAFILES;
創建TEMP表空間:
CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE '/oradata/CTCNZQF/temp01.dbf' SIZE 1024 m
,'/oradata/CTCNZQF/temp02.dbf' SIZE 1024 m,'/oradata/CTCNZQF/temp03.dbf' SIZE 1024 m
AUTOEXTEND ON NEXT 10 m MAXSIZE UNLIMITED;
修改臨時表空間為TEMP
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;
刪除TEMP1表空間就可以了
ok歷經了兩天終于完成了。restore這一步驟就用了10個小時更更更更重要的是檢查備份狀態
如果有1節點的數據泵備份,我就可以單獨恢復一個schema,也不用折騰了兩天了。
所以最最最最最最重要的還是備份
剩下的就是讓開發人員自己去整理數據了~(* ̄︶ ̄)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。