1. 程式人生 > >資料庫歸檔模式介紹

資料庫歸檔模式介紹

簡介:

歸檔日誌(Archive Log)是非活動的重做日誌備份.通過使用歸檔日誌,可以保留所有重做歷史記錄,當資料庫處於ARCHIVELOG模式並進行日誌切換時,後臺程序ARCH會將重做日誌的內容儲存到歸檔日誌中,當資料庫出現介質失敗時,使用資料檔案備份,歸檔日誌和重做日誌可以完全恢復資料庫。在Oracle10g中,只要啟動資料庫的歸檔模式,Oracle就會啟用自動歸檔,從而避免了10g以前由於使用者疏忽所帶來的一系列問題。

日誌操作模式:ARCHIVELOG(歸檔),NOARCHIVELOG(非歸檔)

Oracle10g資料庫的歸檔模式詳細步驟

對於非歸檔模式的資料庫改為歸檔模式(主要以Oracle 10g為參考)使用以下步驟:

步驟1(檢視資料庫的歸檔狀態)

首先檢視資料庫現有模式可使用以下語句,顯示資料庫處於非歸檔模式下
SQL>select name,log_mode from v$database;

NAME      LOG_MODE

---------    ------------

ZHQHDB    NOARCHIVELOG


也可以用下面的語句

[[email protected]~ 10:28 #9]$ sqlplus / as sysdba

SQL>archive log list

Database log mode              No Archive Mode

Automatic archival               Disabled

Archive destination              ?/dbs/arch

Oldest online log sequence       534

Current log sequence             536

步驟2(設定歸檔日誌檔案路徑)

SQL>alter system setlog_archive_dest_1='location=/u01/arch';該語句含義是設定歸檔日誌檔案的存放路徑,實際上Oracle 10g以後可以生成多份一樣的日誌,儲存多個位置以防不測

例如再新增一個歸檔日誌檔案存放位置可使用以下語句
SQL>altersystem set log_archive_dest_2='location=

/u02/arch ';
“location=/u01/arch”此目錄是要從根目錄開始的一個完整的目錄

詳細介紹歸檔日誌檔案的存放的兩種方法:

方法一、使用log_archive_dest和log_archive_duplex_dest配置歸檔位置

如果不使用備用資料庫,只需要將歸檔日誌存放到本地目錄.配置本地歸檔位置可以使用初始化引數LOG_ARCHIVE_DESTLOG_ARCHIVE_DUPLEX_DEST,其中,第一個引數用於設定第一個歸檔位置,第二個引數用於設定第二個歸檔位置.

ALTER SYSTEM SET log_archive_dest='/u01/arch';

ALTER SYSTEM SET log_archive_duplex_dest='/u01/arch';

方法二、使用LOG_ARCHIVE_DEST_n配置多個歸檔位置.

初始化引數LOG_ARCHIVE_DEST_n用於指定多個歸檔位置,該引數最多可以指定10個歸檔位置.通過使用初始化引數LOG_ARCHIVE_DEST_n,不僅可以配置本地歸檔位置,還可以配置遠端歸檔位置. 如果既要在主節點上生成歸檔日誌,又要將歸檔日誌傳遞到備用節點,那麼必須使用引數LOG_ARCHIVE_DEST_n.

兩種方法的比較:

1)         方法二可以配置本地和遠端歸檔目錄,而方法一隻能配置本地歸檔目錄.

2)         方法二可以配置多達10個歸檔目錄,方法一最多隻能配置兩個歸檔目錄.

3)         如果用方法一那麼log_archive_dest是強制(MANDATORY)歸檔目錄,而log_archive_duplex_dest為可選(OPTIONAL)歸檔目錄,且第一種方法中不能使用REOPEN關鍵字

4)         方法一與方法二是互拆的,設定了方法一引數就不能再設定方法二的引數反之亦然

當使用初始化引數LOG_ARCHIVE_DEST_n配置本地歸檔位置時,需要指定LOCALTION選項.當配置遠端歸檔位置時,需要指定SERVICE選項.

示例如下:

ALTER SYSTEM SET log_archive_dest_1='location=/u01/arch';

ALTER SYSTEM SET log_archive_dest_2='location=/u02/arch';

ALTER SYSTEM SET log_archive_dest_3='service=standby';

配置遠端歸檔位置時,SERVICE選項需要指定遠端資料庫的網路服務名(在tnsnames.ora檔案中配置)

使用LOG_ARCHIVE_DEST_n的關鍵字

使用初始化引數LOG_ARCHIVE_DEST_n配置歸檔位置時,可以在歸檔位置上指定OPTIONALMANDATORY選項;指定MANDATORY選項時,可以設定REOPEN屬性.

OPTIONAL:該選項是預設選項.使用該選項時,無論歸檔是否成功,都可以覆蓋重做日誌.

MANDATORY:強制歸檔.使用該選項時,只有在歸檔成功之後,重做日誌才能被覆蓋,在設定時至少應該有一個本地(location)強制(mandatory)歸檔目錄

REOPEN:該屬性指定如果歸檔不成功嘗試重新歸檔的時間間隔,預設值為300秒,必須跟在MANDATORY後.

例如:

Alter system set log_archive_dest_1=’location=/u01/arch mandatory’;

Alter system set log_archive_dest_2=’location=/u02/arch mandatory reopen=500’;

Alter system set log_archive_dest_3=’location=/u03/arch optional’;

控制本地歸檔成功的最小個數

使用初始化引數LOG_ARCHIVE_MIN_SUCCEED_DEST控制本地歸檔的最小成功個數

alter system set log_archive_min_succeed_dest=2;

如上設定為2就說明至少要有2個歸檔目錄歸檔成功後redo日誌才能被重寫;如果log_archive_dest_n中的mandatory關鍵字個數大於這個引數那麼此引數值失效,只有小於這個數的時候這個引數才有效

使用初始化引數LOG_ARCHIVE_DEST_STATE_n控制歸檔位置的可用性

設定該引數為ENABLE(預設值),表示會啟用相應的歸檔位置;設定該引數為DEFER/DISABLE,表示禁用相應歸檔位置.當歸檔日誌所在磁碟損壞或填滿時,DBA需要暫時禁用該歸檔目錄.

Alter system set log_archive_dest_state_3=defer/disable;(禁用)

Alter system set log_archive_dest_state_3=enable;(啟用)

配置歸檔檔案格式
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile
(指定歸檔日誌檔案的格式);

當資料庫處於ARCHIVELOG模式時,如果進行日誌切換,後臺程序將自動生成歸檔日誌目錄,歸檔日誌的預設位置為%oracle_home%rdbms,在oracle database 10g中,歸檔日誌的預設檔案格式為ARCH%S_%R.%T。

歸檔日誌檔案可以指定以下匹配符:

%s: 日誌序列號:

%S: 日誌序列號(帶有前導0)

%t: 重做執行緒編號.

%T: 重做執行緒編號(帶有前導0)

%a: 活動ID號

%d: 資料庫ID號

%r:  RESETLOGS的ID值

%R:  RESETLOGS的ID值(帶有前導0)

從10g開始,配置歸檔日誌檔案格式時,必須帶有%s,%t和%r匹配符,設定了歸檔檔案格式後必須重啟資料庫,修改完成後手動干預進行日誌切換檢視歸檔日誌檔案格式是否正確。

步驟3(修改資料庫為歸檔模式)

關閉資料庫
SQL>shutdown immediate
啟動資料mount狀態:
SQL>startup mount

修改資料庫為歸檔模式:
SQL>alter database archivelog;
開啟資料庫,查詢:
SQL>alter database open

步驟4(配置歸檔程序個數)可選

初始化引數LOG_ARCHIVE_MAX_PROCESSES用於指定例程初始啟動的最大歸檔程序個數,當將資料庫轉變為ARCHIVELOG模式時,預設情況下oracle會自動啟動兩個歸檔程序.通過改變初始化引數LOG_ARCHIVE_MAX_PROCESS的值,可以動態地增加或降低歸檔程序的個數,每個例項歸檔程序數量最多隻能為30個取值範圍為[0-9 a-t]:

ALTER SYSTEM SETLOG_ARCHIVE_MAX_PROCESSES=3 scope=both;

如果設定的歸檔程序個數超過30如下圖會有錯誤提示

其實對於oracle 10g以前的版本還有log_archive_start引數與LOG_ARCHIVE_MAX_PROCESSES結合使用,但是對於10g及後期的版本這個引數完全做廢了,如下圖資料庫已啟用歸檔同時在日誌發生切換時日誌也會自動歸檔只是log_archive_start引數值還是false,所以到10G後這個引數就不用理它了

步驟5(顯示歸檔日誌資訊)

1.使用ARCHIVE LOG LIST命令可以顯示日誌操作模式,歸檔位置,自動歸檔機器要歸檔的日誌序列號等資訊.

2.顯示歸檔日誌資訊.

Select name,sequence#, first_change# FROM v$archived_log;

Name用於表示歸檔日誌檔名,sequence#用於表示歸檔日誌對應的日誌序列號,firs_change#用於標識歸檔日誌的起始SCN值.

3.執行介質恢復時,需要使用歸檔日誌檔案,此時必須準確定位歸檔日誌的存放位置.通過查詢動態效能檢視v$archive_dest可以取得歸檔日誌所在目錄.

SELECT  *  FROMv$archive_dest;

4.顯示日誌歷史資訊

SELECT * FROMv$loghist;

THREAD#用於標識重做執行緒號,SEQUNCE#用於標識日誌序列號,FIRST_CHANGE#用於標識日誌序列號對應的起始SCN值,FIRST_TIME用於標識起始SCN的發生時間.SWICTH_CHANGE#用於標識日誌切換的SCN值.

5.顯示歸檔程序資訊.

進行日誌切換時,ARCH程序會自動將重做日誌內容複製到歸檔目錄中,為了加快歸檔速度,應該啟用多個ARCH程序.通過查詢動態效能檢視V$ARCHIVE_PROCESSES可以顯示所有歸檔程序的資訊!

SELECT * FROMv$archive_processes;

Porcess用於標識ARCH程序的編號,status用於標識ARCH程序的狀態(ACTIVE:活動,STOPPED:未啟動),log_sequence用於標識正在進行歸檔的日誌序列號,state用於標識ARCH程序的工作狀態

步驟6(執行手工歸檔)

從oracle database 10g開始,當將日誌操作模式轉變未ARCHIVELOG模式時,oracle會自動啟動ARCH程序.如果要使用手工歸檔.那麼在改變日誌操作模式時必須使用命令ALTER DATABASEARCHIVELOG MANUAL;

需要注意,使用手工歸檔方式,資料庫管理員必須手工執行歸檔命令.如果沒有執行手工歸檔命令,日誌組的原有內容將不能被覆蓋.ALTER DATABASE ARCHIVELOG MANUAL 命令是為了與先前的版本相容而保留的,將來的oracle版本會淘汰該命令,使用手工歸檔方式時,資料庫管理員可以執行以下命令歸檔重做日誌:

alter systemarchive log all;                --手動歸檔所有switch的日誌

alter systemarchive log sequence 545;   --545為日誌序列號

alter systemarchive log current;          --歸檔當前聯機日誌檔案

arter databasearchivelog;                 --用此命令再次將資料庫改為自動歸檔,手動歸檔一般情況下在10g及後期版本其實已經沒什麼了

注意點

1  特別指出的是在Oracle 9i中還要修改引數log_archive_start = true才

能生效,oracle 10g中已經廢除了該引數,所以不需要設定該引數。oracle 9i 設定log_archive_start = true的命令是:alter system setlog_archive_start=TRUE scope=spfile;並且不用重啟資料庫,就可以生效;

2  alter system switch logfile  是強制日誌切換,不一定就歸檔當前的重做日誌檔案(若自動歸檔開啟,就歸檔前的重做日誌,若自動歸檔沒有開啟就不歸檔當前重做日誌)

3  10G如果沒有設定歸檔路徑,在設定了閃回目錄的情況下預設會把歸檔日誌放到閃回恢復目錄中,如果閃回恢復目錄也沒設定那麼會將歸檔日誌放在$ORACLE_HOME/dbs/arch目錄中。
showparameter db_recovery_file_dest

停用歸檔(將資料庫從歸檔變為非歸檔)

在歸檔日誌模式下,有可能會遇到歸檔日誌大小超過最大值而出現討厭的ORA-00257錯誤,前面說了如何把歸檔日誌空間變大。而在普通的開發環境下,其實是根本用不著歸檔日誌的,設個時候我們就把資料庫的歸檔日誌給禁用了,也就是說把資料庫變為非歸檔日誌模式,應該怎麼做呢。

1.        如果是10G及後期的版本直接跳到步驟2,而10G之前的版本此步必須操作,用

SYS使用者進行登入,首先設定歸檔程序關閉。

alter system set log_archive_start=falsescope=spfile;

2.關閉資料庫。

shutdown immediate
3.再後面把資料庫啟動到mount的模式

startup mount
4
如果是10G及後期的版本直接跳至步驟5,而10G之前的版本必須關閉資料庫的flash

模式,如果不關閉此功能在後面關閉歸檔日誌的時候就會出現討厭的ORA-38774

誤;這個主要針對早期的版本,而對於10G及後期的版本此引數也是不需要改的,而

且閃回功能最好是要開啟否則資料庫的整個閃回特性都失效,也是得不償失的。

alter database flashback off
5.接著把資料庫改為非歸檔模式

alter database noarchivelog;
6.都修改好了以後,然後開啟資料庫

alter database open;
7.接著看一下log日誌的狀態,這一步不能省略修改後切記發現日誌的狀態為stale非

正常狀態的要留意一下,聯機日誌全部手工切換一遍確保沒有問題

select * from v$log;

 select * from v$logfile;
8.檢視閃回恢復區域空間使用狀況,這個只在沒有指定歸檔目錄而指定了閃回恢復區域的

情況下才用得著

select * from v$flash_recovery_area_usage;
這些都沒有問題以後至此停用資料庫歸檔就算順利完成了

ORA-00258:

停用歸檔日誌後開啟資料庫時報如下錯誤

Sql>alter database open;

alter database open
*
ERROR at line 1:
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log

出現這個問題的原因主要就是將資料庫從歸檔改為非歸檔模式導致資料開啟時報如上錯誤,可能是日誌歸檔沒有完成而這時已將資料改為非歸檔模式了,在開啟資料庫的時候沒有歸檔完成的日誌又要重新進行歸檔,可這時發現據庫已處於非歸檔模式下了。解決這個問題的方法是先進入歸檔模式將所有聯機日誌進行手工歸檔然後再將資料庫改為非歸檔模式如下:

(1)檢視資料庫的歸檔目錄位置
sql> show parameter log_archive_dest_1
(2)檢視當前資料庫日誌情況
sql> select * from v$log;
    GROUP#    THREAD# SEQUENCE#      BYTES    MEMBERS ARCSTATUS   FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- --------------------- -------------------
        1         1       1528 209715200          1 NO CURRENT      476386158 2010-04-20 13:20:13
        2         1       1526 209715200          1 YESINACTIVE     476094078 2010-04-14 16:00:07
        3         1       1527 209715200          1 NO INACTIVE     476248931 2010-04-17 22:00:54
(3)嘗試歸檔第一組日誌
sql>alter system archive log group 1;
alter system archive log group 1
ERROR at line 1:
ORA-00259: log 1 of open instance ora10g (thread 1) is the current log, cannotarchive
錯誤提示很顯然,當前日誌組不允許歸檔。
(4)嘗試歸檔第二組日誌
sql >alter system archive log group 2;
alter system archive log group 2
ERROR at line 1:
ORA-16013: log 2 sequence# 1526 does not need archiving
因為歸檔狀態是“YES”,因此該組日誌無需歸檔。
(5)嘗試歸檔第三組之日
sql >alter system archive log group 3;
System altered.
歸檔成功。
(6)確認歸檔檔案
sql > !ls-l /u01/arch/
total 194652
-rw-r----- 1 oracle oinstall 199121920 Apr 21 06:38 1_1527_688786498.arch
(7)有關手工歸檔操作補充內容
以上我們使用的是資料庫引數指定的路徑存放手工歸檔生成的檔案,我們還可以額外指定歸檔寫入的路徑方法如下
sql > alter system archive log group 3 to'/home/oracle';
System altered.
sql > !ls -l /home/oracle/1_1527_688786498.arch
-rw-r----- 1 oracle oinstall 199121920 Apr21 06:45 /home/oracle/1_1527_688786498.arch

注意:其實還有一種方法就是將資料改回歸檔模式然後開啟資料過一段時間後再將資料庫改為非歸檔模式,資料庫就可以正常開啟了。

檢視

作用

V$DATABASE

LOG_MODE欄位歸檔模式

V$INSTANCE

ARCHIVER欄位是否正在歸檔

V$ARCHIVED_LOG

從控制檔案中獲取的所有歷史歸檔日誌檔案資訊

V$ARCHIVE_DEST

歸檔目標位置的資訊

V$ARCHIVE_PROCESSES

歸檔程序的資訊

V$BACKUP_REDOLOG

所有已備份的歸檔日誌檔案的資訊

V$LOG

所有重做日誌檔案的資訊,其中包含那些需要歸檔的重做日誌檔案

V$LOG_HISTORY

重做日誌檔案的歷史資訊

相關推薦

資料庫歸檔模式介紹

簡介: 歸檔日誌(Archive Log)是非活動的重做日誌備份.通過使用歸檔日誌,可以保留所有重做歷史記錄,當資料庫處於ARCHIVELOG模式並進行日誌切換時,後臺程序ARCH會將重做日誌的內容儲存到歸檔日誌中,當資料庫出現介質失敗時,使用資料檔案備份,歸檔日誌和重做日

DB2資料庫歸檔模式下線上備份及恢復

以下方法使用線上備份方式並且恢復時無須手動複製日誌檔案。 前提:          修改資料庫引數,使之開啟歸檔日誌,支援線上備份。 備份命令:            db2 backup db dbname online to 【路徑名】compress includ

如何開啟和關閉oracle資料庫歸檔模式

開啟和關閉歸檔模式 關閉資料庫 SQL>shutdown immediate; 啟動到mount方式 SQL>startup mount; 開啟歸檔模式 SQL>alter database archivelog; 關閉歸檔模式 SQL>

oracle 資料庫歸檔模式的開啟與關閉

      在實際應用中,我們需要實現對資料的備份,其實現方式主要有冷備份和熱備份兩種。現在我們主要討論熱備份的具體操作。熱備份也稱為聯機備份,在資料庫的存檔模式下進行備份。oracel資料庫預設存檔模式為關閉狀態,要實現資料的熱備份,需要改變資料庫的存檔模式,將其開啟。並且

歸檔模式下如何手工備份和恢復整個oracle資料庫

非歸檔模式下如何手工備份和恢復oracle資料庫? 1.確定資料庫處於非歸檔模式 2.一致性關閉資料庫後,手工copy備份資料檔案、聯機重做日誌檔案、控制檔案 3.啟動資料庫,操作一段時間後,模擬資料檔案、聯機重做日誌檔案、控制檔案全部丟失 4.關閉資料庫後,手工copy備份

檢視oracle資料庫是否歸檔和修改歸檔模式

分為非歸檔模式(NOARCHIVELOG) 和歸檔模式(ARCHIVELOG)。非歸檔模式不產生歸檔日誌,雖然節省了硬碟空間,但是備份方案選擇很有限,通常只能選擇冷備份。還原也只能還原到備份那一時刻的資料,通常也僅在開發時使用(據說在資料倉庫中也使用),Oracle安裝預設

Oracle歸檔模式下恢復-資料庫完全恢復方法例項1

最初在關閉狀態下進行開啟資料庫恢復的例項: 以pioneer_data表空間為例: ============================製造假損壞======================================= 1、備份表空間: SQL> alter tablespace pionee

DB2資料庫設定歸檔模式

 已存在資料庫設定歸檔模式方法: 1)斷開所有資料庫連線 db2 force applications all 2)離線備份資料 db2 backup db dbName 3)連線資料庫&建立日誌目錄&設定歸檔模式 db2 connect to db

Oracle將資料庫從非歸檔模式修改為自動歸檔模式

檢視資料庫的現行日誌和自動歸檔模式的設定 sys@ORCL> archive log list; 資料庫日誌模式 非存檔模式 自動存檔 禁用 存檔

ORACLE歸檔模式下的熱備以及資料庫開啟狀態狀態下普通資料檔案損壞後的還原

前提:歸檔模式下開啟熱備份模式 1.備份資料庫 在PL/SQL下執行以下SQL產生啟動表空間的熱備模式: select 'alter tablespace ' || tablespace_name || ' begin backup;' from dba_tablespa

23種設計模式介紹以及單例模式的學習

單例模式 餓漢式 23種設計模式 gof23 1、GOF23 設計模式總共分成創建型模式、結構型模式和行為型模式三種: a、創建型模式: - 單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式 b、構建型模式: - 適配器模式、橋接模式、裝配模式、組合模式、建造者模

Oracle學習筆記—歸檔模式

enable 11.2 bit dmi copyright 災難 筆記 關閉數據庫 tle 什麽是歸檔模式 Oracle數據庫有聯機重做日誌,這個日誌是記錄對數據庫所做的修改,比如插入,刪除,更新數據等,對這些操作都會記錄在聯機重做日誌裏。一般數據庫至少要有2個聯機重做日誌

23種設計模式介紹(一)---- 創建型模式

接口 ret static 深復制 return 對象 相互 object c png 由於設計模式篇幅比較大,如果在一篇文章講完所有的設計模式的話不利於閱讀。於是我把它分為三篇文章 23種設計模式介紹(一)---- 創建型模式 23種設計模式介紹(二)---- 結構型模

RabbitMQ 一二事4 - 路由模式介紹

http dia cluster iis line max har 模式 abr %E5%9C%A8%20Windows%20%E4%B8%8A%E6%B5%8B%E8%AF%95%20Redis%20Cluster%E7%9A%84%E9%9B%86%E7%BE%A4%E

1.Angular框架-angular介紹與基本使用,MVC模式介紹

就會 web javascrip 點擊 技術分享 fig page 格式 存儲 1.1. AngularJS概述 1.1.1. 介紹 簡稱:ng Angular是一個MVC框架 AngularJS 誕生於2009年,由 Misko Hevery 等人創建,後為Goog

數據庫歸檔模式的管理

指定 默認 11.2 用戶 rdbms 進入 dmi run 開啟歸檔 Oracle在開啟了歸檔模式後,會在指定的archive目錄下產生很多的archivelog文件, 而且默認是不會定期清除的,時間長久了,該文件夾會占用很大的空間。數據庫開啟歸檔模式之後,雖然可以保障

Oracle啟動或關閉歸檔模式

spa enter arch mod cti pri next sting med 在Oracle安裝後,默認歸檔模式開啟,大量的日誌會瞬間填滿磁盤,所以在開發環境,經常需要關閉歸檔模式。 1.管理員身份連接數據庫 $sqlplus user/passwd

改變數據庫歸檔模式

lte from 歸檔 http 9.png 方法 style es2017 open 1.查看歸檔日誌模式(兩種方法)   a.  archive log list   b.   select log_mode from v$database; 2.關閉數據庫實例

Oracle數據庫設置為歸檔模式的操作方法

oracl tab data alt star pan 非歸檔 操作 ora Oracle歸檔模式非常非常重要!對於有些數據庫剛裝好後可能是非歸檔模式,這是很危險的!為了安全起見,一定要謹記:對於Oracle數據庫,一定要設置為歸檔模式,尤其是生產庫,只有這樣才能實現數

查看是否為歸檔模式

於歸檔模式查看是否為歸檔模式 SQL> archive log list;修改oracle日誌模式:1,關閉數據庫:shutdown immediate;2,啟動數據庫實例到mount狀態:startup mount;3,切換數據庫日誌模式: alter database archivelog