Oracle數據庫開啟歸檔日志及rman備份情況查詢


一、Oracle數據庫開啟歸檔日志

Oracle恢復演練,由於備份需要,需要開啟歸檔日志。

1.1歸檔日志

歸檔日志(Archive Log)是非活動的重做日志備份.通過使用歸檔日志,可以保留所有重做歷史記錄,當數據庫處於ARCHIVELOG模式並進行日志切換式,后台進程ARCH會將重做日志的內容保存到歸檔日志中.當數據庫出現介質失敗時,使用數據文件備份,歸檔日志和重做日志可以完全恢復數據庫。

1.2ARCHIVELOG模式

ORACLE數據庫運行在ARCHIVELOG模式時,所有的事務重做日志都將保存.這意味着對數據庫進行的所有事務都留有一個備份,盡管重做日志以循環方式工作,但在一個重做日志被覆蓋前均將為其建立一個副本.在重做日志文件復制完成之前,ORACLE數據庫將停止一切新的操作,在舊的事務記錄完成之前ORACLE不對其進行覆蓋.有了所有事務的副本,數據庫就可以從所有類型的失敗中恢復,包括用戶錯誤或磁盤崩潰.這是一種最安全的數據庫工作方式。

1.3啟動歸檔日志

1.登錄sysdba賬戶,本例子中的Oracle是綁定的服務器,直接在對應服務器上用下面的命令登錄:

sqlplus / as sysdba

 

2.查看歸檔信息

SQL> archive log list

//輸出結果

Database log mode           No Archive Mode

Automatic archival           Disabled

Archive destination           USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     241

Current log sequence           255

No Archive Mode表示當前數據庫未開啟歸檔模式


3. 設置歸檔目錄,該修改重啟后生效
oracle默認使用閃回恢復區DB_RECOVERY_FILE_DEST作為歸檔路徑,但是閃回恢復區在安裝過程中有限制其大小,如果閃回恢復區滿了,歸檔日志會因為無法寫入而導致數據庫阻塞。解決辦法是可以通過增加閃回區大小或者修改歸檔日志的路徑。修改log_archive_dest_1參數即可修改歸檔日志路徑(pfile/spfile中參數db_recovery_file_dest指定的目錄將無效),從Oracle 10g開始,可以生成多份一樣的日志,保存多個位置,加強安全性,多個位置通過設置不同的log_archive_dest_{n}參數實現,archive log list輸出中的Archive destination路徑只顯示最新修改的路徑。

 

SQL> show parameter log_archive_dest_1

//輸出結果

NAME     TYPE VALUE

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

log_archive_dest_1     string

SQL> alter system set log_archive_dest_1='location=/oradata/archivelog' scope=spfile;

//輸出結果

System altered.


4. 修改歸檔日志格式,該修改重啟后生效

SQL> alter system set log_archive_format='ARC%S_%R.%T_%D.dbf' scope=spfile;

//輸出結果

System altered.


5. 開啟歸檔日志
需要在mount狀態下開始數據庫歸檔,重啟至mount

SQL> shutdown immediate

//輸出結果

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

 

Total System Global Area 1603411968 bytes

Fixed Size            2213776 bytes

Variable Size          989857904 bytes

Database Buffers      603979776 bytes

Redo Buffers            7360512 bytes

Database mounted.

 

開啟數據庫歸檔:

SQL> alter database archivelog;

//輸出結果

Database altered.

 

查看歸檔結果:

SQL> archive log list

 

//輸出結果

Database log mode           Archive Mode

Automatic archival           Enabled

Archive destination           /u01/app/oracle/archive_log

Oldest online log sequence     244

Next log sequence to archive   246

Current log sequence           246

 

開啟強制歸檔:

ALTER DATABASE FORCE LOGGING;

 

打開數據庫:

SQL> alter database open;

Database altered.

 

6.確認數據庫為歸檔模式

SQL> select log_mode from v$database;

//輸出結果

LOG_MODE

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

ARCHIVELOG

 

SQL> select archiver from v$instance;

 

ARCHIVE

-------

STARTED

 

7.強制日志切換,確認是否開啟歸檔成功
先查看當前歸檔日志視圖和歸檔日志路徑:

SQL> select name from v$archived_log;

//輸出結果

no rows selected

[oracle@zml-rhel6 archive_log]$ ll

//輸出結果

total 0

 

如結果所示,沒有歸檔日志,下面執行強制日志切換:

SQL> alter system switch logfile;

//輸出結果

System altered.

再次查看視圖

SQL> select name from v$archived_log;

//輸出結果

NAME

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

/oradata/archivelog/ARC0000002429_0993570162.0001_e7cda172.dbf

 

有歸檔日志產生,驗證歸檔日志開啟成功

1.4歸檔日志的清理

歸檔日志非常占用物理空間,應定時清理,歸檔日志的清理分為兩部分:
1.物理刪除歸檔日志
該方式是利用linux的腳本和crontab定時任務來查找n天前的日志進行刪除,首先編寫日志刪除腳本:

[oracle@i-F44CBDC1 shell]$ vim deleteArchiveLog.sh

//輸入如下指令,意為刪除5天前的所有文件

find /oradata/archivelog -mtime +5 -name "*.*" -exec rm -Rf {} \;

保存腳本后,根據實際情況賦予權限或組別,然后操作crontab,本例子均在oracle用戶下創建定時任務:

[root@i-F44CBDC1 ~]# crontab -e

//輸入如下指令,意為每天035分執行刪除歸檔日志腳本,並將腳本的執行記錄輸出到log文件中

35 0 * * * sh /usr/local/shell/deleteArchiveLog.sh >>/var/local/deletearchivelog.log

保存后,定時任務會到時間執行腳本。


2. 雖然物理刪除了歸檔日志文件,但是控制文件中依然會有這些日志的記錄,下面需要在控制文件中清理這些歸檔日志,利用RMAN進行清理。

//rman登錄

rman target/

查看過期日志:

RMAN> list expired archivelog all;

//輸出結果

specification does not match any archived log in the repository

信息中顯示沒有過期日志,這是因為需要先檢查歸檔日志的有效性,再進行刪除:

RMAN> crosscheck archivelog all;

//輸出結果

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=70 device type=DISK

validation succeeded for archived log

archived log file name=/oradata/archivelog/ARC0000002448_0993570162.0001_e7cda172.dbf RECID=415 STAMP=1026952512

validation succeeded for archived log

archived log file name=/oradata/archivelog/ARC0000002449_0993570162.0001_e7cda172.dbf RECID=416 STAMP=1026952520

validation succeeded for archived log

archived log file name=/oradata/archivelog/ARC0000002450_0993570162.0001_e7cda172.dbf RECID=417 STAMP=1026952542

validation succeeded for archived log

再次查看過期的歸檔日志,rm刪除的文件便被標記為了過期日志:

RMAN> list expired archivelog all;

//輸出結果

List of Archived Log Copies for database with db_unique_name ORCLWHS

=====================================================================

 

Key     Thrd Seq     S Low Time

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

      1    606     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002609_0993570162.0001_e7cda172.dbf

      1    607     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002610_0993570162.0001_e7cda172.dbf

      1    608     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002611_0993570162.0001_e7cda172.dbf

刪除過期的歸檔日志:

RMAN> delete expired archivelog all;

//輸出結果

released channel: ORA_DISK_1

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=446 device type=DISK

List of Archived Log Copies for database with db_unique_name ORCLWHS

=====================================================================

 

Key     Thrd Seq     S Low Time

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

       1    606     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002609_0993570162.0001_e7cda172.dbf

      1    607     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002610_0993570162.0001_e7cda172.dbf

      1    608     X 04-JUN-18

        Name: /oradata/archivelog/ARC0000002611_0993570162.0001_e7cda172.dbf

//詢問是否要刪除上述文件,輸入YES

Do you really want to delete the above objects (enter YES or NO)? yes

deleted archived log

archived log file name=/oradata/archivelog/ARC0000002609_0993570162.0001_e7cda172.dbf RECID=1 STAMP=977949943

deleted archived log

archived log file name=/oradata/archivelog/ARC0000002610_0993570162.0001_e7cda172.dbf RECID=2 STAMP=977954446

deleted archived log

archived log file name=/oradata/archivelog/ARC0000002611_0993570162.0001_e7cda172.dbf RECID=3 STAMP=977954551

Deleted 3 EXPIRED objects

再次查詢過期的歸檔日志:

RMAN> list expired archivelog all;

//輸出結果

specification does not match any archived log in the repository

我們可以將上述流程封裝為shell腳本,用定時任務執行,首先創建腳本:

[oracle@i-F44CBDC1 shell]$ vim clearArchiveLog.sh

//輸入如下內容

PATH=$PATH:$HOME/bin

 

export PATH

export NLS_LANG=AMERICAN_AMERICA.zhs16gbk

export ORACLE_SID=zjfwjyptdb

export ORACLE_BASE=/oracle/app

export ORACLE_HOME=/oracle/app/database/ora11g

export SQLPATH=/home/oracle/scripts

export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib:

export PATH=$ORACLE_HOME/bin:/usr/bin:/usr/ccs/bin:/etc:/bin:/usr/openwin/bin:\

/usr/local/bin:/usr/X11R6/bin:/oracle/crs/bin:$PATH

umask 022

 

$ORACLE_HOME/bin/rman target / log=/home/oracle/del_arch$(date +%Y-%m-%d).log <<EOF

crosscheck archivelog all;

delete noprompt expired archivelog all;

delete noprompt archivelog all completed before 'sysdate - 5';

exit;

EOF

保存腳本,然后創建定時任務:

[oracle@i-F44CBDC1 shell]$ crontab -e

//輸入如下內容,意為040執行clearArchiveLog.sh,並將執行信息輸出到archivelogrmanlog.log文件中

 

40 0 * * * sh /usr/local/shell/clearArchiveLog.sh >>/var/local/archivelogrmanlog.log

保存退出,這樣就可以定時清理控制文件中的歸檔日志記錄了。
參考文章:https://www.cnblogs.com/ZeroTiny/p/9135247.html

 

 

二、rman查看備份情況操作命令

查看備份集:

RMAN> list backupset;

List of Backup Sets

===================

查看SCHEMA統計信息:

RMAN> report schema;

Report of database schema for database with db_unique_name ORCL

List of Permanent Datafiles

===========================

查看表空間的備份情況:

RMAN> list backup of tablespace users;

List of Backup Sets

===================

查看數據文件的備份情況:

RMAN> list backup of datafile 1;

List of Backup Sets

===================

查看控制文件的備份情況:

RMAN> list backup of controlfile;

List of Backup Sets

===================

查看設備類型為“Disk”的備份:(## 查看磁帶上的備份可以使用“list device type sbt backup;”命令)

RMAN> list device type disk backup;

List of Backup Sets

===================

查看歸檔日志及其備份情況:

注:## 查看歸檔日志的命令為:list archivelog all; ## 查看未備份的備份集;

## 查看歸檔日志備份集的命令為:list backup of archivelog all; ## 查看已備份的備份集;

RMAN> list archivelog all;

List of Archived Log Copies for database with db_unique_name ORCL

=====================================================================

查看系統中不存在(或者說是不在指定路徑下)的備份:

RMAN> list expired backup;

specification does not match any backup in the repository

注:
1.以上命令## 查看的是不存在的備份,如備份集用操作系統命令刪除之后,crosscheck之后該備份集就為expired(X)狀態。

2.跟obsolete概念區分,該參數是針對不滿足retention policy條件(可以按照存放份數,也可以按照存放日期)的備份。

查看過期的備份:

RMAN> report obsolete;

查看幾天前的schema狀態

RMAN> report schema at time 'SYSDATE-1';

查看需要備份的文件:

RMAN> report need backup;

查看違反規則的備份:

RMAN> report obsolete;

RMAN retention policy will be applied to the command

RMAN retention policy is set to redundancy 1

no obsolete backups found

 

參考:http://blog.chinaunix.net/uid-20802110-id-3849567.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM