Oracle_高級功能(10) 備份恢復
備份與恢復
Oracle數據庫有三種標準的備份方法,分別是導出/導入(EXP/IMP)、熱備份和冷備份。
導出/導入是一種邏輯備份,冷備份和熱備份是物理備份。
一、導出/導入(Export/Import)
利用Export可將數據從數據庫中提取出來,利用Import則可將提取出來的數據送回到Oracle數據庫中去。
數據導入(Import)的過程是數據導出(Export)的逆過程,
分別將數據文件導入數據庫和將數據庫數據導出到數據文件。
1、全量導出數據(Export)和導入數據(Import)
Oracle支持三種方式類型的輸出:
1.1 表方式(T方式),將指定表的數據導出、導入。
導出表:
exp system/123 tables=scott.dept file=e:\dept.dmp
log=e:\explog_empdept.log
導入表:
drop table scott.emp;
drop table scott.dept;
--drop table scott.dept cascade constraints;
imp system/123@orcl fromuser=(scott) touser=(scott) tables=(dept,emp)
file=e:\empdept.dmp log=e:\implog_empdept.log
1.2 用戶方式(U方式),將指定用戶的所有對象及數據導出、導入。
--常用
connect system/123@orcl;
--刪除用戶--
drop user find cascade;
--刪除表空間--
drop tablespace ts_find including contents;
--創建表空間及數據文件--
create tablespace ts_find01 datafile ‘E:\app\oradata\orcl\ts_find01.DBF‘ size 100M reuse autoextend on next 10M;
create user find identified by find default tablespace ts_find01;
grant resource,connect to find;
grant select any sequence to find;
grant create any table,alter any table,drop any table to find;
grant select any table,insert any table,update any table,delete any table to find;
grant create any trigger,alter any trigger,drop any trigger to find;
grant create any procedure,alter any procedure,drop any procedure,execute any procedure to find;
grant create any view,drop any view to find;
grant create any synonym to find;
imp system/123@orcl fromuser=(scott) touser=(find) buffer=655000
ignore=y commit=y file=e:\scott.dmp log=e:\scott_imp.log
1.3 全庫方式(Full方式),將數據庫中的所有對象導出。
exp system/123@orcl file=e:\full.dmp log=e:\full_exp.log full=y buffer=655000 compress=y
--一般不用
imp system/123@orcl full=y buffer=655000 ignore=y commit=y file=e:\full.dmp log=e:\full_imp.log
2、增量導出/導入
增量導出是一種常用的數據備份方法,它只能對整個數據庫來實施,並且必須作為SYSTEM來導出。
導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導出包括三種類型:
2.1“完全”增量導出(Complete)
即備份完整的數據庫信息,
比如:
exp system/system@orcl inctype=complete file=e:\complete.dmp log=e:\complete_exp.log
2.2“增量型”增量導出
備份上一次備份後改變的數據,
比如:
exp system/manager inctype=incremental file=e:\incremental.dmp log=e:\incremental_exp.log
2.3“累積型”增量導出
累計型導出方式是導出自上次“完全”導出之後數據庫中變化了的信息。
比如:
exp system/manager inctype=cumulative file=e:\cumulative.dmp log=e:\cumulative_exp.log
數據庫管理員可以排定一個備份日程表,用數據導出的三個不同方式合理高效的完成。
比如數據庫的被封任務可以做如下安排:
星期一:完全備份(A)
星期二:增量導出(B)
星期三:增量導出(C)
星期四:增量導出(D)
星期五:累計導出(E)
星期六:增量導出(F)
星期日:增量導出(G)
如果在星期日,數據庫遭到意外破壞,數據庫管理員可按一下步驟來回復數據庫:
第一步:用命令create database重新生成數據庫結構;
第二步:創建一個足夠大的附加回滾。
第三步:完全增量導入:
imp system/manager inctype=restore full=y file=e:\complete.dmp
第四步:累計增量導入:
imp system/manager inctype=restore full=y file=e:\cumulative.dmp
第五步:最近增量導入:
imp system/manager inctype=restore full=y file=e:\incremental.dmp
二、冷備份
冷備份發生在數據庫已經正常關閉的情況下,當正常關閉時會提供給我們一個完整的數據庫。
冷備份是將關鍵性文件拷貝到另外的位置的一種說法。
對於備份Oracle信息而言,冷備份是最快和最安全的方法。
冷備份的優點是:
1.是非常快速的備份方法(只需拷文件)
2.容易歸檔(簡單拷貝即可)
3.容易恢復到某個時間點上(只需將文件再拷貝回去)
4.能與歸檔方法相結合,做數據庫“最佳狀態”的恢復。
5.低度維護,高度安全。
但冷備份也有如下不足:
1.單獨使用時,只能提供到“某一時間點上”的恢復。
2.再實施備份的全過程中,數據庫必須要作備份而不能作其他工作。也就是說,在冷備份過程中,數據庫必須是關閉狀態。
3.若磁盤空間有限,只能拷貝到磁帶等其他外部存儲設備上,速度會很慢。
4.不能按表或按用戶恢復。
冷備份中必須拷貝的文件包括:
1.所有數據文件
2.所有控制文件
3.所有聯機REDO LOG文件
4.Init.ora文件(可選)
值得註意的是冷備份必須在數據庫關閉的情況下進行,當數據庫處於打開狀態時,執行數據庫文件系統備份是無效的。
下面是作冷備份的完整例子。
(1) 關閉數據庫
sqlplus /nolog
sql>connect / as sysdba
--sql>shutdown normal;
sql>shutdown immediate;
(2) 用拷貝命令備份全部的時間文件、重做日誌文件、控制文件、初始化參數文件
sql>cp
(3) 重啟Oracle數據庫
sql>startup
startup nomount --加載參數文件
alter database mount
recover datafile ‘E:\app\oradata\orcl\FIND.DBF‘;
alter database open
三、熱備份
熱備份是在數據庫運行的情況下,采用archivelog mode方式備份數據庫的方法。
熱備份要求數據庫在Archivelog方式下操作,並需要大量的檔案空間。
1. 檢查數據庫模式:
sqlplus /nolog
conn /as sysdba
archive log list (查看數據庫是否處於歸檔模式中)
若為非歸檔,則修改數據庫歸檔模式。
shutdown immediate; --立即關閉數據庫
startup mount; --啟動數據庫到mount狀態
alter database noarchivelog;--設置非歸檔模式
alter database archivelog;--設置歸檔模式
alter database open;--打開數據庫
alter system set log_archive_start=true scope=spfile; --將數據庫設置成自動歸檔
alter tablespace ts_find begin backup; --開啟備份
host copy F:\app\oracle\oradata\orcl\FIND.DBF e:\FIND.DBF --拷貝文件(包括數據文件和控制文件)
alter tablespace ts_find end backup; --結束備份
--備份日誌
select * from v$backup;
四、RMAN
1.啟動日誌歸檔模式:
sql> alter database archivelog;
2.手工創建操作系統目錄:E:\rman\
3.備份語句
run {
configure retention policy to recovery window of 2 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to ‘E:/rman/%F‘;
allocate channel ch1 device type disk format ‘E:/rman/data_%T_%U‘;
backup database skip inaccessible filesperset 10
plus archivelog filesperset 20
delete all input;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;
說明:
通過 configure retention policy to recovery window of 7 days;來設置備份的保留天數,如果是“每天一次全備份”,備份保留2天即可。
通過 crosscheck backupset;檢查備份是否過期。
通過 delete noprompt obsolete; 刪除過期的備份。
4.建表、插數據
create table backup_sales
(
product_id number(10),
sales_date date,
sales_cost number(10,2),
status varchar2(20)
);
insert into backup_sales values (1,sysdate-10,18.23,‘inactive‘);
commit;
5.啟用rman做全庫備份
運行第3步的備份語句
從日誌文件中看出:
Control File and SPFILE:E:\RMAN\C-1275904369-20110429-00
數據文件:E:\RMAN\DATA_20110429_1DMB01T6_1_1
日誌文件:E:\RMAN\DATA_20110429_1CMB01T2_1_1 和 E:\RMAN\DATA_20110429_1EMB022O_1_1
備份檢查完成。
6.再插數據
insert into backup_sales values (2,sysdate-5,18,‘inactive‘);
commit;
--切換日誌(手動觸發檢查點)
connect sys/123@orcl as sysdba;
alter system switch logfile;
--繼續插數據
insert into backup_sales values (3,sysdate-3,88.23,‘inactive‘);
commit;
insert into backup_sales values (4,sysdate-1,8.23,‘inactive‘);
--全庫恢復
1.連接rman
rman target /
2.啟動數據庫到加載狀態
rman> shutdown immediate;
rman> startup mount;
3.執行修復、恢復操作
rman> restore database;
rman> recover database;
4.打開數據庫(恢復完成退出rman)
rman> alter database open;
rman> exit;
5.校驗
SQL> select * from backup_sales;
三條數據齊全,說明數據庫在恢復時啟用日誌文件對數據進行了恢復。
增量備份已現多余,檢查點也無需用戶手動觸發,
oracle在備份前會歸檔一次日誌文件,在備份後也會歸檔一次日誌文件,這也是為什麽備份時生成兩個日誌文件的原因。
Oracle_高級功能(10) 備份恢復