Oracle數據庫冷備份與恢復(救命稻草)


 

 

說明,只要是同樣系統,同樣數據庫版本,是可以做冷備恢復。冷備份數據必須是數據庫不在open狀態下。以oracle11gR2為例。

一、冷備份與冷恢復

具體步驟如下。

1. 復制舊的數據庫文件

(1) 用SQLPlus連接數據庫:
sqlplus 用戶名/密碼 as sysdba
(2) 關閉DB :
shutdown immediate;
(3) 復制文件到其他地方存儲實現備份
1)復制三個文件夾
admin
oradata(datafile controlfileredo【注:數據文件, 控制文件,redo】)
flash_recovery_area三個文件夾
2)dbhome_1下的內容
database(PWDfilepfile)
dbs(spfile)
NETWORK/ADMIN(listener.oratnsnames.ora)。
 

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文件夾,然后進行數據覆蓋。

包括數據文件、參數文件、控制文件、日志文件、pwd文件,放在與原系統相同的目錄。如果目錄有所改變,則需要另外建立控制文件,修改pfile
 
(2) 恢復admin/orcl目錄
在目標機上的admin目錄下建立orcl文件夾,然后在orcl里面再建立adump、bdump、cdump、udump、dpdump、pfile六個文件夾

(3) 建立服務
把源機的密碼文件拷貝到目標機的database目錄下。
使用oradim命令在cmd下 oradim -new -sid orcl 表示建立一個服務,sid為orcl(最好名字和源機備份的數據庫名字一致,就不需要重建密碼文件)。 如果是在linux下,不需要此步。
 
(4) 重建創建參數文件、控制文件
拷貝源機的pfile到目標機的一個目錄下,修改pfile里面相關文件的路徑。
然后通過SQL> create spfile from pfile=‘文件路徑'來創建參數文件
重建控制文件命令:SQL> alter database backup controlfile to trace;
 
然后會在udump文件夾下產生一個 追蹤文件,打開文件找到如下一段,復制到文本中,修改相應路徑然后保存為:createctl.sql文件(sql腳本文件),復制到目標機上。
注意:SQL>alter database backup controlfile to trace as 'F:/DB_RECOVERY/CONTROL_FILE_TRACE.TXT';
復制的原始導出txt中的,相應代碼片段如下:
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
;
View Code
 

(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';
 
修改oracle_home\oradata\orcl下及相關文件的路徑

 

(6) TNSNAMES設置
在network\admin下的tnsnames.ora中添加如下片段
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

(7) 建立監聽
用net configuration為orcl實例新建監聽
 
至此,冷備份恢復成功。即使你現在用oem打開數據庫時發現提示找不到sid ,但實際上你已經成功了,此時只需要重啟一下的你的服務器就可以。
 
 

B、創建實例方式(實例SID與源機數據庫SID一致)

(1) 替換和覆蓋oradata\orcl目錄
刪除目標機的oradata\orcl底下的所有文件,把源機的所有data文件、redo文件拷貝到此目錄下

(2) 密碼文件覆蓋
刪除目標機的密碼文件,拷貝源機密碼文件到目標機下。

(3) 控制文件恢復
在源機上重建目標機的控制文件:SQL>alter database backup controlfile to trace;然后會在udump文件夾下產生一個追蹤文件,打開文件找到上面那段,復制到文本中,修改相應路徑然后保存為:createctl.sql文件(sql腳本文件),復制到目標機上。
復制代碼代碼如下:
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)
)
)
(5) 用net configuration為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'
View Code

(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>
 

解決方法

通過數據字典升級解決

 
(1)使用 startup upgrade 打開數據庫
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;
數據庫已更改。

 

 
 
 
 
 
參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM