Oracle數據庫的備份與恢復技術方案
[Q]如何開啟/關閉歸檔
[A]如果開啟歸檔,請保證log_archive_start=true開啟自動歸檔,否則只能手工歸檔,如果是關閉了歸檔,則設置該參數為false
注意:如果是OPS/RAC環境,需要先把parallel_server = true注釋掉,然后執行如下步驟,最后用這個參數重新啟動
1、開啟歸檔
a. 關閉數據庫shutdown immediate -
b. startup mount
c. alter database archivelog
d. alter database opne
2、禁止歸檔
a. 關閉數據庫shutdown immediate
b. startup mount
c. alter database noarchivelog
d. alter database open
歸檔信息可以通過如下語句查看
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination E:\Oracle\ora92\database\archive
Oldest online log sequence 131
Next log sequence to archive 133
Current log sequence 133
[Q]怎樣設置定時歸檔
[A]9i以上版本,保證歸檔的最小間隔不超過n秒
設置Archive_lag_target = n
單位:秒 范圍:0~7200
[Q]不同版本怎么導出/導入
[A]導出用低版本,導入用當前版本
如果版本跨越太大,需要用到中間版本過渡
[Q]不同的字符集之前怎么導數據
[A]a.前條件是保證導出/導入符合其他字符集標準,如客戶環境與數據庫字符集一致。
b.修改dmp文件的2、3字節為目標數據庫的字符集,注意要換成十六進制。
參考函數(以下函數中的ID是十進制的):
nls_charset_name 根據字符集ID獲得字符集名稱
nls_charset_id 根據字符集名稱獲得字符集ID
[Q]怎么樣備份控制文件
[A]再線備份為一個二進制的文件
alter database backup controlfile to '$BACKUP_DEPT/controlfile.000' [reuse];
備份為文本文件方式
alter database backup controlfile to trace [resetlogs|noresetlogs];
[Q]控制文件損壞如何恢復
[A]1、如果是損壞單個控制文件
只需要關閉數據庫,拷貝一個好的數據文件覆蓋掉壞的數據文件即可
或者是修改init.ora文件的相關部分
2、如果是損失全部控制文件,則需要創建控制文件或從備份恢復
創建控制文件的腳本可以通過alter database backup controlfile to trace獲取。
[Q]怎么樣熱備份一個表空間
[A]Alter tablespace 名稱 begin backup;
host cp 這個表空間的數據文件 目的地;
Alter tablespace 名稱 end backup;
如果是備份多個表空間或整個數據庫,只需要一個一個表空間的操作下來就可以了。
[Q]怎么快速得到整個數據庫的熱備腳本
[A]可以寫一段類似的腳本
SQL>set serveroutput on
begin
dbms_output.enable(10000);
for bk_ts in (select t.ts#,t.name from v$tablespace t,v$datafile d where t.ts#=d.ts#) loop
dbms_output.put_line('--'||bk_ts.name);
dbms_output.put_line('alter tablespace '||bk_ts.name||' begin backup;');
for bk_file in (select file#,name from v$datafile where ts#=bk_ts.ts#) loop
dbms_output.put_line('host cp '||bk_file.name||' $BACKUP_DEPT/');
end loop;
dbms_output.put_line('alter tablespace '||bk_ts.name||' end backup;');
end loop;
end;
/
[Q]丟失一個數據文件,但是沒有備份,怎么樣打開數據庫
[A]如果沒有備份只能是刪除這個數據文件了,會導致相應的數據丟失。
SQL>startup mount
--ARCHIVELOG模式命令
SQL>Alter database datafile 'file name' offline;
--NOARCHIVELOG模式命令
SQL>Alter database datafile 'file name' offline drop;
SQLl>Alter database open;
注意:該數據文件不能是系統數據文件
[Q]丟失一個數據文件,沒有備份但是有該數據文件創建以來的歸檔怎么恢復
[A]保證如下條件
a. 不能是系統數據文件
b. 不能丟失控制文件
如果滿足以上條件,則
SQL>startup mount
SQL>Alter database create datafile 'file name' as 'file name' size ... reuse;
SQL>recover datafile n; -文件號
或者
SQL>recover datafile 'file name';
或者
SQL>recover database;
SQL>Alter database open;
[Q]聯機日志損壞如何恢復
[A]1、如果是非當前日志而且歸檔,可以使用
Alter database clear logfile group n來創建一個新的日志文件
如果該日志還沒有歸檔,則需要用
Alter database clear unarchived logfile group n
2、如果是當前日志損壞,一般不能clear,則可能意味著丟失數據
如果有備份,可以采用備份進行不完全恢復
如果沒有備份,可能只能用_allow_resetlogs_corruption=true來進行強制恢復了,但是,這樣的方法是不建議的,最好在有Oracle support的指導下進行。
[Q]怎么樣在恢復的時候移動數據文件,恢復到別的地點
[A]給一個RMAN的例子
run {
set until time 'Jul 01 1999 00:05:00';
allocate channel d1 type disk;
set newname for datafile '/u04/Oracle/prod/sys1prod.dbf'
to '/u02/Oracle/prod/sys1prod.dbf';
set newname for datafile '/u04/Oracle/prod/usr1prod.dbf'
to '/u02/Oracle/prod/usr1prod.dbf';
set newname for datafile '/u04/Oracle/prod/tmp1prod.dbf'
to '/u02/Oracle/prod/tmp1prod.dbf';
restore controlfile to '/u02/Oracle/prod/ctl1prod.ora';
replicate controlfile from '/u02/Oracle/prod/ctl1prod.ora';
restore database;
sql "alter database mount";
switch datafile all;
recover database;
sql "alter database open resetlogs";
release channel d1;
} 本文出自:億恩科技【www.endtimedelusion.com】
服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]
|