一、Oracle環境
Oracle伺服器:oracle11g
oracle版本:11.2.0.1.0
作業系統版本:Red Hat Enterprise Linux Server release 7.6 (Maipo)
二、歸檔模式介紹
oracle是款高安全性的資料庫,剛安裝好的資料庫一般沒有開啟歸檔模式,我們需要開啟歸檔模式,特別是業務資料庫,開啟歸檔後,故障發生時才可以實現資料庫的完全恢復。
在實際應用中,我們需要實現對資料的備份,其實現方式主要有冷備份和熱備份兩種。現在我們主要討論熱備份的具體操作。熱備份也稱為聯機備份,在資料庫的歸檔模式下進行備份。oracel資料庫預設歸檔模式為關閉狀態,要實現資料的熱備份,需要改變資料庫的歸檔模式,將其開啟。並且需要注意的是資料庫的歸檔模式的操作需要在MOUNT例項中進行,且資料庫不能處於OPEN狀態。
三、開啟歸檔模式
步驟一:首先用sys登入資料庫,檢視oracle是否開啟歸檔模式(su - oracle切換使用者,然後sqlplus / as sysdba進入sql模式)
輸入archive log list來檢視是否開啟,如下說明不是歸檔模式
[oracle@oracle11g ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jun 18 00:48:26 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled /*目前不是歸檔模式
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 7
Current log sequence 9
步驟二:需要將資料庫歸檔更改為enable,使用shutdown immediate來關閉資料庫(因為不能在open狀態下進行操作)
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
步驟三:使用startup mount來啟動資料庫例項(當資料庫處於這個模式時,可以執行一些管理的任務,像恢復操作)
SQL> startup mount
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
步驟四:修改歸檔位置
SQL>alter system set log_archive_dest_1='location=/nbumedia-store' scope=spfile; /*可建立指定的歸檔目錄
System altered.
步驟五:alter database archivelog開啟歸檔模式
SQL> alter database archivelog;
Database altered.
步驟六:alter database open開啟資料庫,此模式為資料庫的正常模式.
SQL> alter database open;
Database altered.
步驟七:此時檢視歸檔狀態,已經變為enable,已經開啟歸檔
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /nbumedia-store
Oldest online log sequence 7
Next log sequence to archive 9
Current log sequence 9
SQL> exit
四、關閉歸檔模式
前面已經提到,資料的存檔模式的操作必須要在mount例項中進行,且資料庫要處於非open狀態。所有關閉存檔模式前,我們需要檢視當前資料庫的狀態,並且關閉資料庫,啟動mount例項,才可進行操作。其具體操作為:
步驟一:使用SQL:select status from v$instance;檢視當前資料庫的狀態,正常情況下一般都處於open狀態。
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
步驟二:使用SQL:shutdown immediate; --關閉資料庫,因為資料庫當前狀態為open
startup mount; --啟動mount例項--
alter database noarchivelog; --改變資料庫存檔模式為非存檔模式
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 281022296 bytes
Database Buffers 780140544 bytes
Redo Buffers 5554176 bytes
Database mounted.
SQL> alter database noarchivelog;
Database altered.
步驟三:此時使用SQL:archive log list 檢視,存檔模式已經變更為非存檔模式。
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /nbumedia-store
Oldest online log sequence 9
Current log sequence 11
SQL>
步驟四:再次使用SQL:select status from v$instance;進行檢視資料庫的當前狀態,當前狀態為mount狀態。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL>
步驟五:最後別忘記使用SQL:alter database open;開啟資料庫。
SQL> alter database open;
Database altered.
步驟六:再次使用SQL:select status from v$instance;檢視資料庫狀態,為open狀態。
SQL> select status from v$instance;
STATUS
------------
OPEN
最後使用快捷鍵Crtl + C 退出sqlplus。
檢視歸檔模式
建立歸檔目錄
修改歸檔目錄和歸檔格式
2 設定恢復目錄/歸檔目錄(僅節點1)
- 正確設定
歸檔檔案可以放在本地,也可以放在asm共享磁碟中,RAC環境要放ASM中。
- 如果是ASM
SQL>alter system set log_archive_dest_1='location=+DATA';
- 如果是檔案系統
SQL>alter system set log_archive_dest_1='location=/archivelog';
- 錯誤設定
SQL>alter system set db_recovery_file_dest_size=500g;
SQL>alter system set db_recovery_file_dest='+DATA';
原因分析:如果歸檔盤是500g,快滿的時候就需要手動增加容量;
如果歸檔空間滿了,資料庫就會報歸檔錯誤,應用無法連線。
- 設定資料庫為非叢集模式(僅節點1)
SQL>show parameter cluster
SQL>alter system set cluster_database=false scope=spfile;
- 節點1和2關閉資料庫
關閉資料庫,啟動後mount(僅節點1)
SQL>shutdown immediate
- 僅在節點1操作
SQL>startup mount
SQL>alter database archivelog;
SQL>alter database open;
- 檢視歸檔狀態
SQL>archive log list;
設定資料庫為叢集模式(僅節點1)
SQL>alter system set cluster_database=true scope=spfile;
此前是在節點1操作,節點2並沒有開啟歸檔,選擇開啟叢集模式後,重新資料庫,節點二也就開啟了歸檔.
重啟資料庫,並開啟(僅節點1)
節點1:
SQL>shutdown immediate;
SQL>startup
先等節點一啟動完成後,再啟動節點二
節點2:
SQL>startup
檢查節點2的歸檔模式:
SQL>archive log list;
Oracle 19c RAC開歸檔
7、配置歸檔日誌刪除指令碼和定時任務
mkdir -p /home/oracle/scripts/
vi /home/oracle/scripts/del_arch.sh
##新增以下指令碼
!/bin/bash source ~/.bash_profile deltime=`date +"20%y%m%d%H%M%S"` rman target / nocatalog msglog /home/oracle/scripts/del_arch_${deltime}.log<<EOF crosscheck archivelog all; delete noprompt archivelog until time 'sysdate-7'; delete noprompt force archivelog until time 'SYSDATE-10'; EOF