說明,只要是同樣系統,同樣數據庫版本,是可以做冷備恢復。冷備份數據必須是數據庫不在open狀態下。以oracle11gR2為例。
一、冷備份與冷恢復
具體步驟如下。
1. 復制舊的數據庫文件
(2) 關閉DB :
(3) 復制文件到其他地方存儲實現備份
1)復制三個文件夾
2. Oracle重新建庫恢復
(1)創建一個和原來一樣的數據庫。(安裝路徑和數據庫名必須和原來一致)
(2)停止數據庫shutdown immediate;
(3)復制安裝目錄下的admin、oradata、flash_recovery_area覆蓋,復制database(PWDfile、pfile) 覆蓋
(4)啟動數據庫 startup;
備注:
無歸檔模式:將備份文件拷貝回原來的目錄即可,然后啟動數據庫。
歸檔模式:
①將數據文件、控制文件拷貝回原來目錄
②SQL>startup mount;
SQL>recover database using backup controlfile;
③將相應的歸檔日志和聯機日志拖到CMD命令窗口進行跑日志。
④SQL>alter database open resetlogs;
3. 軟件重裝恢復
此時,操作系統重裝,如果做冷備恢復,要保證相同操作系統,相同的數據庫版本。形勢如同異機恢復。
A、不創建實例:(源機上的數據庫名字為orcl)
(1) 恢復oradata/orcl目錄
在目標機上的oradata目錄下建立orcl文件夾,然后進行數據覆蓋。
(3) 建立服務

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\YTQ.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\ZJHH',
'E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE_TBS',
'I:\ZJECMS\DB\DB_BK_DATA\RMAN_LOCAL_1805\RMAN_BKUP_1805.DBF'
CHARACTER SET ZHS16GBK
;
(5) 數據庫設置SID和啟動服務
c:\>set ORACLE_SID=orcl c:\>sqlplus "/as sysdba" SQL>create spfile from pfile='c:\pfile.txt'; SQL>@c:\createctl.sql; SQL>shutdown immediate; SQL>startup; SQL>alter database open resetlogs;
備注:
如果(4)、(5)不好用,可以用下面的方法修改這些路徑不一致的問題(反正筆者電腦上冷備份恢復時,上面的兩個步驟就不好用):
1)SQL>下執行如下語句,恢復控制文件
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
2)修改日志、DBF的路徑

alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' to 'E:\IDEPROS\oracle_home\oradata\orcl\REDO01.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' to 'E:\IDEPROS\oracle_home\oradata\orcl\REDO02.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' to 'E:\IDEPROS\oracle_home\oradata\orcl\REDO03.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\SYSTEM01.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\SYSAUX01.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\UNDOTBS01.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\USERS01.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\EXAMPLE01.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\YTQ.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\YTQ.DBF';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\ZJHH' to 'E:\IDEPROS\oracle_home\oradata\orcl\ZJHH';
alter database rename file 'E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE_TBS' to 'E:\IDEPROS\oracle_home\oradata\orcl\SDE_TBS';
alter database rename file 'I:\ZJECMS\DB\DB_BK_DATA\RMAN_LOCAL_1805\RMAN_BKUP_1805.DBF' to 'E:\IDEPROS\oracle_home\oradata\orcl\RMAN_BKUP_1805.DBF';
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
(7) 建立監聽
B、創建實例方式(實例SID與源機數據庫SID一致)
(1) 替換和覆蓋oradata\orcl目錄(2) 密碼文件覆蓋
(3) 控制文件恢復
復制代碼代碼如下:
c:\>sqlplus "/as sysdba" SQL>@c:\createctl.sql; SQL>shutdown immediate; SQL>startup; SQL>alter database open resetlogs;
(4) 在network\admin下的tnsnames.ora中添加如下片段
復制代碼代碼如下:
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ) )
二、問題與解決
1. ORA-03113: 通信通道的文件結尾
在從mount狀態下,啟動時出現;或者從startup命令啟動時出現。
詳情請參考文章
Oracle錯誤——ORA-03113:通信通道的文件結尾 解決辦法
如何釋放 DB_RECOVERY_FILE_DEST_SIZE
解決方法:
(1) 查看diag\rdbms\oracle\oracle\trace\下的oracle_ora_xxxx.trc錯誤日志
Oracle出現錯誤,於是去錯誤日志里去找問題根源:在 e:\app\kang\diag\rdbms\oracle\oracle\trace\文件夾下找到oracle_ora_6320.trc文件,打開顯示錯誤日志:

ORA-19815: WARNING: db_recovery_file_dest_size of 4102029312 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 38451712 bytes disk space from 4102029312 limit
*** 2018-08-09 17:47:48.882 4132 krsh.c
ARC1: Error 19809 Creating archive log file to 'E:\IDEPROS\ORACLE_HOME\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2018_08_09\O1_MF_1_5330_%U_.ARC'
*** 2018-08-09 17:47:48.882 2747 krsi.c
krsi_dst_fail: dest:1 err:19809 force:0 blast:1
DDE rules only execution for: ORA 312
----- START Event Driven Actions Dump ----
---- END Event Driven Actions Dump ----
----- START DDE Actions Dump -----
Executing SYNC actions
----- START DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (Async) -----
DDE Action 'DB_STRUCTURE_INTEGRITY_CHECK' was flood controlled
----- END DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (FLOOD CONTROLLED, 0 csec) -----
Executing ASYNC actions
----- END DDE Actions Dump (total 0 csec) -----
*** 2018-08-09 17:47:48.882 4529 kcrr.c
ORA-16038: log 2 sequence# 5330 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: 'E:\IDEPROS\ORACLE_HOME\ORADATA\ORCL\REDO02.LOG'
(2) 找出問題根源
從這里我們發現了問題的根源:
ORA-19815: WARNING: db_recovery_file_dest_size of 4102029312 bytes is 100.00% used, and has 0 remaining bytes available.
是db_recovery_file_dest_size也叫歸檔日志空間不足導致的,既然找到問題的根源,那解決起來也就容易了。
(3) 確定解決方法 ---設置歸檔日志空間的大小
空間小,那擺在我們面前辦法就是,一個是將空間設置大點,另一個就是將多余的文件刪除掉即可,那么我們就將這兩個辦法都使用一下。
CMD命令窗口啟動:
方法1:設置歸檔日志空間的大小
-- at cmd
sqlplus / as sysdba
-- at sql
shutdown abort ----關閉進程
startup mount ---- 裝載數據庫
select * from v$recovery_file_dest; ---查詢歸檔日志
exit
-- at cmd
rman target /
-- at rman
db_recovery_file_dest_size = 6442450944; --設置歸檔日志空間為6G (6*1024*1024*1024)
Exit ---到這里空間大小已經設置完成
方法2: 刪除歸檔日志
rman target / -----進入rman工具窗口
RMAN>crosscheck archivelog all; --運行這個命令可以把無效的expired的archivelog標出來。
RMAN>delete noprompt archivelog until time "sysdate -3"; -- -即刪除3天前的歸檔日志
2. ORA-39700: database must be opened with UPGRADE option
具體請參考
ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option
Oracle案例04——ORA-39700: database must be opened with UPGRADE option
錯誤出現的過程
SQL> startup
ORA-01081: 無法啟動已在運行的 ORACLE - 請首先關閉它
SQL> shutdown immediate
ORA-01109: 數據庫未打開
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 3340451840 bytes
Fixed Size 2180344 bytes
Variable Size 1828719368 bytes
Database Buffers 1493172224 bytes
Redo Buffers 16379904 bytes
數據庫裝載完畢。
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
進程 ID: 7660
會話 ID: 191 序列號: 3
SQL>
解決方法
通過數據字典升級解決
C:\Windows\System32>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on 星期四 8月 9 19:09:30 2018
Copyright (c) 1982, 2010, Oracle. All rights reserved.
已連接到空閑例程。
SQL> startup upgrade;
ORACLE 例程已經啟動。
Total System Global Area 3340451840 bytes
Fixed Size 2180344 bytes
Variable Size 1828719368 bytes
Database Buffers 1493172224 bytes
Redo Buffers 16379904 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL>
(2)查看預升級信息
SQL> @$ORACLE_HOME/rdbms/admin/utlu112i.sql
(3)執行升級腳本
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql
//這個過程時間比較長, 執行完上面操作執行,也可重新正常打開數據庫即可。
SQL> @$ORACLE_HOME/rdbms/admin/utlu112s.sql
SQL> @$ORACLE_HOME/rdbms/admin/catuppst.sql
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
(4)重啟數據庫
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup;
3. ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
參考 ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NOR
冷備份1.1中的內容后,在原地回復這些dbf文件,及參數、日志、控制重新覆蓋在目標位置后,重新在sqlplus下執行1.2的步驟后,可能會出現如上的錯誤。解決辦法如下:SQL> alter database open resetlogs; alter database open resetlogs * ERROR 位於第 1 行: ORA-01113: 文件 1 需要介質恢復 ORA-01110: 數據文件 1: 'E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF' SQL> recover database using backup controlfile; ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 對於線程 1 是必需的 ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00030.001 ORA-00280: 更改 1670743 對於線程 1 是按序列 # 30 進行的 指定日志: {=suggested | filename | AUTO | CANCEL} E:\oracle\oradata\EYGLE\REDO01.LOG ORA-00310: 存檔日志包含序列 29;要求序列 30 ORA-00334: 歸檔日志: 'E:\ORACLE\ORADATA\EYGLE\REDO01.LOG' SQL> recover database using backup controlfile; ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 對於線程 1 是必需的 ORA-00289: 建議: E:\ORACLE\ORA92\RDBMS\ARC00030.001 ORA-00280: 更改 1670743 對於線程 1 是按序列 # 30 進行的 指定日志: {=suggested | filename | AUTO | CANCEL} E:\oracle\oradata\EYGLE\REDO02.LOG 已應用的日志。 完成介質恢復。 SQL> alter database open resetlogs; 數據庫已更改。