熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle FAQ 之備份與恢復篇

2013-11-13 15:57:29  來源: Oracle 

  [Q]如何開啟/關閉歸檔
  [A]如果開啟歸檔請保證log_archive_start=true開啟自動歸檔否則只能手工歸檔如果是關閉了歸檔則設置該參數為false
  注意如果是OPS/RAC環境需要先把parallel_server = true注釋掉然後執行如下步驟最後用這個參數重新啟動
  開啟歸檔
  a 關閉數據庫shutdown immediate
  b startup mount
  c alter database archivelog
  d alter database opne
  禁止歸檔
  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\ora\database\archive
  Oldest online log sequence
  Next log sequence to archive
  Current log sequence
  
  [Q]怎樣設置定時歸檔
  [A]i以上版本保證歸檔的最小間隔不超過n秒
  設置Archive_lag_target = n
  單位秒 范圍~
  
  [Q]不同版本怎麼導出/導入
  [A]導出用低版本導入用當前版本
  如果版本跨越太大需要用到中間版本過渡
  
  [Q]不同的字符集之前怎麼導數據
  [A]a前條件是保證導出/導入符合其他字符集標准如客戶環境與數據庫字符集一致
  b修改dmp文件的字節為目標數據庫的字符集注意要換成十六進制
  參考函數(以下函數中的ID是十進制的)
  nls_charset_name 根據字符集ID獲得字符集名稱
  nls_charset_id 根據字符集名稱獲得字符集ID
  
  [Q]怎麼樣備份控制文件
  [A]再線備份為一個二進制的文件
  alter database backup controlfile to $BACKUP_DEPT/controlfile [reuse];
  備份為文本文件方式
  alter database backup controlfile to trace [resetlogs|noresetlogs];
  
  [Q]控制文件損壞如何恢復
  [A]如果是損壞單個控制文件
  只需要關閉數據庫拷貝一個好的數據文件覆蓋掉壞的數據文件即可
  或者是修改initora文件的相關部分
  如果是損失全部控制文件則需要創建控制文件或從備份恢復
  創建控制文件的腳本可以通過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_outputenable();
  for bk_ts in (select distinct tts#tname from v$tablespace tv$datafile d where tts#=dts#) loop
  dbms_outputput_line(||bk_tsname);
  dbms_outputput_line(alter tablespace ||bk_tsname|| begin backup;);
  for bk_file in (select file#name from v$datafile where ts#=bk_tsts#) loop
  dbms_outputput_line(host cp ||bk_filename|| $BACKUP_DEPT/);
  end loop;
  dbms_outputput_line(alter tablespace ||bk_tsname|| 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]如果是非當前日志而且歸檔可以使用
  Alter database clear logfile group n來創建一個新的日志文件
  如果該日志還沒有歸檔則需要用
  Alter database clear unarchived logfile group n
  如果是當前日志損壞一般不能clear則可能意味著丟失數據
  如果有備份可以采用備份進行不完全恢復
  如果沒有備份可能只能用_allow_resetlogs_corruption=true來進行強制恢復了但是這樣的方法是不建議的最好在有Oracle support的指導下進行
  
  [Q]怎麼樣創建RMAN恢復目錄
  [A]首先創建一個數據庫用戶一般都是RMAN並給予recovery_catalog_owner角色權限
  sqlplus sys
  SQL> create user rman identified by rman;
  SQL> alter user rman default tablespace tools temporary tablespace temp;
  SQL> alter user rman quota unlimited on tools;
  SQL> grant connect resource recovery_catalog_owner to rman;
  SQL> exit;
  然後用這個用戶登錄創建恢復目錄
  rman catalog rman/rman
  RMAN> create catalog tablespace tools;
  RMAN> exit;
  最後你可以在恢復目錄注冊目標數據庫了
  rman catalog rman/rman target backdba/backdba
  RMAN> register database;
  
  [Q]怎麼樣在恢復的時候移動數據文件恢復到別的地點
  [A]給一個RMAN的例子
  run {
  set until time Jul ::;
  allocate channel d type disk;
  set newname for datafile /u/oracle/prod/sysproddbf
  to /u/oracle/prod/sysproddbf;
  set newname for datafile /u/oracle/prod/usrproddbf
  to /u/oracle/prod/usrproddbf;
  set newname for datafile /u/oracle/prod/tmpproddbf
  to /u/oracle/prod/tmpproddbf;
  restore controlfile to /u/oracle/prod/ctlprodora;
  replicate controlfile from /u/oracle/prod/ctlprodora;
  restore database;
  sql alter database mount;
  switch datafile all;
  recover database;
  sql alter database open resetlogs;
  release channel d;
  }
  
  [Q]怎麼從備份片(backuppiece)中恢復(restore)控制文件與數據文件
  [A]可以使用如下方法在RMAN中恢復備份片的控制文件
  restore controlfile from backuppiecefile;
  如果是i的自動備份可以采用如下的方法
  restore controlfile from autobackup;
  但是如果控制文件全部丟失需要指定DBID如SET DBID=?
  自動備份控制文件的默認格式是%F這個格式的形式為
  cIIIIIIIIIIYYYYMMDDQQ其中IIIIIIIIII就是DBID
  至於恢復(restore)數據文件oracle 開始有個包dbms_backup_restore
  在 nomount 狀態下就可以執行可以讀 甚至之前的備份片讀出來的文件用於恢復
  可以在SQLPLUS中運行如下
  SQL>startup nomount
  SQL> DECLARE
   devtype varchar();
   done boolean;
   BEGIN
   devtype := dbms_backup_restoredeviceallocate( params=>);
   dbms_backup_restorerestoresetdatafile;
   dbms_backup_restorerestorecontrolfileto(E:\Oracle\oradata\penny\controlctl);
   dbms_backup_restorerestoreDataFileto(E:\Oracle\oradata\penny\systemdbf);
   dbms_backup_restorerestoreDataFileto(E:\Oracle\oradata\penny\UNDOTBSDBF);
   dbms_backup_restorerestoreDataFileto(E:\ORACLE\ORADATA\PENNY\USERSDBF);
   dbms_backup_restorerestorebackuppiece(D:\orabak\BACKUP___FIAJTPENNYdone=>done);
   END;
   /
  PL/SQL 過程已成功完成
  SQL> alter database mount;
  
  [Q]Rman的format格式中的%s類似的東西代表什麼意義
  [A]可以參考如下
  %c 備份片的拷貝數
  %d 數據庫名稱
  %D 位於該月中的第幾天 (DD)
  %M 位於該年中的第幾月 (MM)
  %F 一個基於DBID唯一的名稱這個格式的形式為cIIIIIIIIIIYYYYMMDDQQ其中IIIIIIIIII為該數據庫的DBIDYYYYMMDD為日期QQ是一個的序列
  %n 數據庫名稱向右填補到最大八個字符
  %u 一個八個字符的名稱代表備份集與創建時間
  %p 該備份集中的備份片號開始到創建的文件數
  %U 一個唯一的文件名代表%u_%p_%c
  %s 備份集的號
  %t 備份集時間戳
  %T 年月日格式(YYYYMMDD)
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/17579.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.