1. 程式人生 > >用戶管理的備份與恢復

用戶管理的備份與恢復

ras red sele site ges filename style tab 恢復數據


用戶管理的備份與恢復也稱OS物理備份,是指通過數據庫命令設置數據庫為備份狀態, 然後用操作系統命令,拷貝需要備份或恢復的文件。這種備份與恢復需要用戶的參與手工或 自動完成。

一、歸檔與非歸檔


(一)、NONARCHIVELOG 模式


1.脫機冷備與恢復


冷備份發生在數據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數 據庫。冷備份是將關鍵性文件拷貝到另外位置的一種說法。對於備份Oracle 信息而言,冷 備份是最快和最安全的方法。

2.冷備份的優點:

1.是非常快速的備份方法(只需拷貝文件)
2.容易歸檔(簡單拷貝即可)
3.容易恢復到某個時間點上(只需將文件再拷貝回去)
4.能與歸檔方法相結合,作數據庫“最新狀態”的恢復。
5.低度維護,高度安全。


3.冷備份的不足:


1.單獨使用時,只能提供到“某一時間點上”的恢復。
2.在實施備份的全過程中,數據庫必須要作備份而不能作其它工作。也就是說,在 冷備份過程中,數據庫必須是關閉狀態。
3.若磁盤空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。
4.不能按表或按用戶恢復。

如果可能的話(主要看效率),應將信息備份到磁盤上,然後啟動數據庫(使用戶可以 工作)並將所備份的信息拷貝到磁帶上(拷貝的同時,數據庫也可以工作)。冷備份中必須 拷貝的文件包括:
1.所有數據文件
2.所有控制文件
3.所有聯機REDO LOG文件
4.參數化參數Init.ora文件(可選)



(二)、ARCHIVELOG 模式


1.脫機冷備與恢復


同NONARCHIVELOG模式

2.聯機熱備


聯機熱備是在數據庫運行的情況下進行備份的方法。熱備份要求數據庫在Archivelog 方式下操作,並需要大量的檔案空間。

3.熱備份的優點:


1.可在表空間或數據文件級備份,備份時間短。
2.備份時數據庫仍可使用,支持24*7 不間斷運行。
3.可達到秒級恢復(恢復到某一時間點上)。
4.可對幾乎所有數據庫實體作恢復。
5.恢復是快速的,在大多數情況下在數據庫仍工作時恢復。

4.熱備份的不足是:

1.不能出錯,否則後果嚴重。
2.若熱備份不成功,所得結果不可用於時間點的恢復。
3.因難於維護,所以要特別仔細小心,不允許“以失敗而告終”。
註意:在熱備過程中系統會生成更多的重做日誌和回滾數據。所以必須在數據庫較 空閑時才進行備份





二、非歸檔模式


(一)、丟失控制文件


1.單個控制文件丟失


這種情況解決方法很簡單,只要把多路復用的控制文件拷貝到相應路徑就行了。

2.所有控制文件丟失


(1) 重建控制文件(略)
(2) 使用備份的控制文件進行恢復


Last login: Sat Aug 3 22:58:59 2013 from 192.168.21.1
-----登錄oracle 用戶
[root@oracle ~]# su - oracle
-----修改環境變量的實例名
[oracle@oracle ~]$ export ORACLE_SID=emrep
-----連接到數據庫
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 3 23:01:58 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
-----備份控制文件(二進制)
SQL> alter database backup controlfile to
‘/u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl‘;
Database altered.
-----刪除正在使用的控制文件(制造故障)
SQL> ho rm -rf /u01/app/oracle/oradata/emrep/*.ctl
-----重啟數據庫
SQL> startup force;
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size 1219904 bytes
Variable Size 138412736 bytes
Database Buffers 301989888 bytes
Redo Buffers 2973696 bytes
-----觀察錯誤信息
ORA-00205: error in identifying control file, check alert log for more info
-----從備份復原控制文件
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/.
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/control02.ctl
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/control03.ctl
-----將數據庫開到mount 模式
SQL> alter database mount;
Database altered.
-----打開數據庫
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
-----要求以RESETLOGS 或者NORESETLOGS 選項打開數據庫
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ‘/u01/app/oracle/oradata/emrep/system01.dbf‘
-----需要進行介質恢復
SQL> recover database using backup controlfile;
ORA-00279: change 720303 generated at 08/03/2013 22:55:38 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_11_822517966.dbf
ORA-00280: change 720303 for thread 1 is in sequence #11
-----查詢可知當前的日誌文件組
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/emrep/redo01.log
Log applied.
Media recovery complete.
-----以RESETLOGS 的方式啟動數據庫
SQL> alter database open resetlogs;
Database altered.
-----及時進行全庫備份 

3.修改數據庫結構後丟失所有控制文件

-----備份控制文件
SQL> alter database backup controlfile to
‘/u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl‘;
Database altered.
-----創建新的表空間(數據文件)
SQL> create tablespace t1 datafile ‘/u01/app/oracle/oradata/emrep/t1.dbf‘ size 10m;
Tablespace created.
-----在新的表空間上創建表a
SQL> create table a(id number) tablespace t1;
Table created.
-----刪除當前的控制文件
SQL> ho rm -rf /u01/app/oracle/oradata/emrep/*.ctl
-----重啟數據庫
SQL> startup force;
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size 1219904 bytes
Variable Size 138412736 bytes
Database Buffers 301989888 bytes
Redo Buffers 2973696 bytes
-----觀察錯誤信息
ORA-00205: error in identifying control file, check alert log for more info
-----還原控制文件
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/.
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/control02.ctl
SQL> ho cp /u01/app/oracle/backup/emrep/ctl/2013-8-4/control01.ctl
/u01/app/oracle/oradata/emrep/control03.ctl
-----將數據庫置為mount
SQL> alter database mount;
Database altered.
-----要求以RESETLOGS 或者NORESETLOGS 選項打開數據庫
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

-----以RESETLOGS 選項打開數據庫
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ‘/u01/app/oracle/oradata/emrep/system01.dbf‘
-----使用備份的控制文件進行恢復
SQL> recover database using backup controlfile;
ORA-00279: change 720553 generated at 08/03/2013 23:05:27 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_1_822524687.dbf
ORA-00280: change 720553 for thread 1 is in sequence #1
-----應用在線日誌
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/emrep/redo01.log
ORA-00283: recovery session canceled due to errors
-----數據文件未命名
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 5: ‘/u01/app/oracle/oradata/emrep/t1.dbf‘
ORA-01112: media recovery not started
-----查詢數據文件信息
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/emrep/system01.dbf
/u01/app/oracle/oradata/emrep/undotbs01.dbf
/u01/app/oracle/oradata/emrep/sysaux01.dbf
/u01/app/oracle/oradata/emrep/users01.dbf
/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00005
-----更名數據文件
SQL> alter database create datafile
‘/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00005‘ as
‘/u01/app/oracle/oradata/emrep/t1.dbf‘;
Database altered.
-----恢復數據庫
SQL> recover database using backup controlfile;
ORA-00279: change 721446 generated at 08/03/2013 23:07:44 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/10.2.0/db_1/dbs/arch1_1_822524687.dbf
ORA-00280: change 721446 for thread 1 is in sequence #1


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle/oradata/emrep/redo01.log
Log applied.
Media recovery complete.
-----以RESETLOGS 方式打開數據庫
SQL> alter database open resetlogs;
Database altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/emrep/system01.dbf
/u01/app/oracle/oradata/emrep/undotbs01.dbf
/u01/app/oracle/oradata/emrep/sysaux01.dbf
/u01/app/oracle/oradata/emrep/users01.dbf
/u01/app/oracle/oradata/emrep/t1.dbf
-----檢驗a 表是否存在
SQL> select * from a;
no rows selected
SQL> desc a;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER


4.修改數據庫後脫機或者只讀表空間,丟失所有控制文件

-----trace 備份控制文件
SQL> alter database backup controlfile to tracer as
‘/u01/app/oracle/backup/emrep/ctl/2013-8-4/ct.sql‘;
Database altered.
-----創建表空間t2(數據文件)
SQL> create tablespace t2 datafile ‘/u01/app/oracle/oradata/emrep/t2.dbf‘ size 10m;
Tablespace created.
-----在t2 表空間上創建表b
SQL> create table b(id number) tablespace t2;
Table created.
-----只讀表空間
SQL> alter tablespace t2 read only;
-----刪除當前的控制文件
SQL> ho rm -rf /u01/app/oracle/oradata/emrep/*.ctl

-----重新啟動數據庫
SQL> startup force;
ORACLE instance started.
Total System Global Area 444596224 bytes
Fixed Size 1219904 bytes
Variable Size 138412736 bytes
Database Buffers 301989888 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info
-----重建控制文件(使用備份的控制文件進行恢復也可以)
SQL> @/u01/app/oracle/backup/emrep/ctl/2013-8-4/c.sql
Control file created.
-----打開數據庫
SQL> alter database open;
Database altered.
-----查詢數據文件信息
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------------------------------------------------------
/u01/app/oracle/oradata/emrep/system01.dbf SYSTEM
/u01/app/oracle/oradata/emrep/undotbs01.dbf ONLINE
/u01/app/oracle/oradata/emrep/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/emrep/users01.dbf ONLINE
/u01/app/oracle/oradata/emrep/t1.dbf ONLINE
/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00006 OFFLINE
6 rows selected.
-----發現有一個數據文件名字不對,重命名
SQL> alter database rename file
‘/u01/app/oracle/product/10.2.0/db_1/dbs/MISSING00006‘ to
‘/u01/app/oracle/oradata/emrep/t2.dbf‘;
Database altered.
-----再次查詢
SQL> select name,status from v$datafile;
NAME STATUS
---------------------------------------------------------------------------------------
/u01/app/oracle/oradata/emrep/system01.dbf SYSTEM
/u01/app/oracle/oradata/emrep/undotbs01.dbf ONLINE
/u01/app/oracle/oradata/emrep/sysaux01.dbf ONLINE
/u01/app/oracle/oradata/emrep/users01.dbf ONLINE
/u01/app/oracle/oradata/emrep/t1.dbf ONLINE
/u01/app/oracle/oradata/emrep/t2.dbf OFFLINE
6 rows selected.

-----將t2 表空間置為online
SQL> alter tablespace t2 online;
Tablespace altered.
-----將t2 表空間置為讀寫
SQL> alter tablespace t2 read write;
Tablespace altered.
-----驗證b 表
SQL> select * from b;

用戶管理的備份與恢復