達夢資料庫DM8之REDOLOG重做日誌檔案管理

一顆小綠芽2022發表於2022-05-06

達夢資料庫DM8之重做日誌檔案 

    重做日誌(即 REDO 日誌)指在 DM 資料庫中新增、刪除、修改物件,或者改變資料,DM 都會按照特定的格式,

將這些操作執行的結果寫入到當前的重做日誌檔案中。重做日誌檔案以 log 為副檔名。每個 DM 資料庫例項必須至少

有 2 個重做日誌檔案,預設兩個日誌檔案為 DAMENG01.log、DAMENG02.log,這兩個檔案迴圈使用。

    重做日誌檔案因為是資料庫正在使用的日誌檔案,因此被稱為聯機日誌檔案。

    重做日誌檔案主要用於資料庫的備份與恢復。理想情況下,資料庫系統不會用到重做日誌檔案中的資訊。然而現實

世界總是充滿了各種意外,比如電源故障、系統故障、介質故障,或者資料庫例項程式被強制終止等,資料庫緩衝區

中的資料頁會來不及寫入資料檔案。這樣,在重啟 DM 例項時,通過重做日誌檔案中的資訊,就可以將資料庫的狀態

恢復到發生意外時的狀態。

    重做日誌檔案對於資料庫是至關重要的。它們用於儲存資料庫的事務日誌,以便系統在出現系統故障和介質故障時

能夠進行故障恢復。在 DM 資料庫執行過程中,任何修改資料庫的操作都會產生重做日誌,例如,當一條元組插入到

一個表中的時候,插入的結果寫入了重做日誌,當刪除一條元組時,刪除該元組的事實也被寫了進去,這樣,當系統出

現故障時,通過分析日誌可以知道在故障發生前系統做了哪些動作,並可以重做這些動作使系統恢復到故障之前的狀態。



1.管理重做日誌檔案

1.1 新增重做日誌檔案

在伺服器開啟狀態下,可以新增新的重做日誌檔案。新增的資料檔案大小最小為 4096*頁大小,如頁大小為 8K,則可

新增的檔案最小值為 4096*8k=32M。如新增重做大小為 128M的重做日誌檔案 DAMENG03.log。

ALTER DATABASE ADD LOGFILE 'd:\DAMENG03.log' size 128;


1.2 擴充套件重做日誌檔案

在伺服器開啟狀態下,可以擴充套件已有的重做日誌檔案的大小。如擴充套件重做日誌檔案DAMENG03.log 到 256M。

ALTER DATABASE RESIZE LOGFILE 'd:\DAMENG03.log' to 256;


--操作例項

1. 檢查資料庫REDO日誌資訊

達夢資料庫中與REDO日誌相關的檢視主要有:

1.1 V$RLOG 檢視:用來查詢日誌的總體資訊。包括當前日誌的檢查點LSN、檔案LSN等。

[dmdba@dmdb01 ~]$ disql SYSDBA/SYSDBA@192.168.186.128:5240

伺服器[192.168.186.128:5240]:處於普通開啟狀態

登入使用時間 : 2.756(ms)

disql V8

SQL> select * from v$rlog;

行號     CKPT_LSN             FILE_LSN             FLUSH_LSN            CUR_LSN              NEXT_SEQ             N_MAGIC    

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

           DB_MAGIC             FLUSH_PAGES FLUSHING_PAGES CUR_FILE    CUR_OFFSET           CKPT_FILE   CKPT_OFFSET         

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

           FREE_SPACE           TOTAL_SPACE          SUSPEND_TIME UPD_CTL_LSN          N_RESERVE_WAIT TOTAL_FLUSH_PAGES   

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

           TOTAL_FLUSH_TIMES    TOTAL_ECPR_FLUSH_PAGES GLOBAL_NEXT_SEQ      N_PRIMAY_EP PRIMARY_DB_MAGIC     CKPT_N_PRIMAY_EP

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

           CKPT_PRIMARY_DB_MAGIC MIN_EXEC_VER MIN_DCT_VER

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

1          48565                50910                50910                50910                5149                 7

           1488733682           0           0              0           11720704             0           11452928

           536594944            536862720            NULL         0                    0              523

           3                    0                      5149                 0           0                    0

           0                     V8.1.1.1     4

已用時間: 13.014(毫秒). 執行號:500.

SQL> 


1.2 V$RLOGFILE 檢視:用來查詢日誌檔案的具體資訊。包括當前資料庫的日誌檔案路徑、大小、建立時間等資訊。

SQL> select * from v$rlogfile;

行號     GROUP_ID    FILE_ID     PATH                             CLIENT_PATH CREATE_TIME                RLOG_SIZE           

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

           MIN_EXEC_VER MIN_DCT_VER

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

1          2           0           /dm8/dmdbms/data/dm01/dm0101.log dm0101.log  2022-04-24 21:14:40.000000 268435456

           V8.1.1.1     4


2          2           1           /dm8/dmdbms/data/dm01/dm0102.log dm0102.log  2022-04-24 21:14:40.000000 268435456

           V8.1.1.1     4

已用時間: 1.118(毫秒). 執行號:501.

SQL> 


2. 新增REDO日誌檔案

達夢資料庫的REDO日誌檔案是有最小大小限制的,最小大小為4096*頁大小,當前資料庫的頁大小可以通過如下語句檢視:

SQL> select para_name,para_value from v$dm_ini where para_name = 'GLOBAL_PAGE_SIZE';

行號     PARA_NAME        PARA_VALUE

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

1          GLOBAL_PAGE_SIZE 32768

已用時間: 8.783(毫秒). 執行號:503.

SQL> 

所以當前資料庫能夠新增的REDO日誌檔案最小大小為4096*32768=128MB,我們可以通過alert database add logfile的

方式新增REDO日誌檔案,如下所示:

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

已用時間: 0.786(毫秒). 執行號:505.

SQL> 

1)測試新增小於128M的REDO日誌檔案

SQL> alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 100;

alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 100;

第1 行附近出現錯誤[-2410]:資料檔案[/dm8/dmdbms/data/dm01/dm0103.log]大小無效.

已用時間: 0.319(毫秒). 執行號:0.

2)測試新增大於等於128M的REDO日誌檔案

SQL> alter database add logfile '/dm8/dmdbms/data/dm01/dm0103.log' size 128;

操作已執行

已用時間: 13.997(毫秒). 執行號:506.

SQL> 

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 128

已用時間: 0.241(毫秒). 執行號:507.

SQL> 

注意:以上過程我們可以看到,當日志檔案大小小於128MB時,會提示“第1 行附近出現錯誤[-2410]:資料文

件[/dm8/dmdbms/data/dm01/dm0103.log]大小無效.”。


3. 修改現有REDO日誌檔案大小

達夢8資料庫目前只能對日誌檔案進行向上(擴大)RESIZE操作,不能進行向下(縮容)RESIZE操作,可以通過

alter database resize to語句實現,我們現在將上面新增的日誌檔案由128MB擴大到150MB,再嘗試縮容到128MB,

過程如下:

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 128

已用時間: 0.241(毫秒). 執行號:507.

SQL> 

SQL> alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 150;

操作已執行

已用時間: 11.492(毫秒). 執行號:508.

SQL> alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 128;

alter database resize logfile '/dm8/dmdbms/data/dm01/dm0103.log' to 128;

[-2410]:資料檔案[/dm8/dmdbms/data/dm01/dm0103.log]大小無效.

已用時間: 2.062(毫秒). 執行號:0.

SQL> 

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                             MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log 256

2          1           /dm8/dmdbms/data/dm01/dm0102.log 256

3          2           /dm8/dmdbms/data/dm01/dm0103.log 150

已用時間: 0.269(毫秒). 執行號:510.

SQL> 

注意:可以看到,FILE_ID為2的日誌檔案可以正常從128MB擴容到150MB,但是向下(縮容)從150MB縮容到128MB

報錯:[-2410]:資料檔案[/dm8/dmdbms/data/dm01/dm0103.log]大小無效。


4.修改REDO日誌檔名

達夢資料庫REDO日誌檔案重新命名必須在MOUNT狀態下進行,通過alter database rename to語句實現,現在我們將

檔案file_id為2的日誌檔案由 dm0103.log改為dm0103_1.log,過程如下:

SQL> select name,instance_name,status$ from v$instance;

行號     NAME INSTANCE_NAME STATUS$

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

1          DM01 DM01          OPEN

已用時間: 0.822(毫秒). 執行號:512.

SQL> 

SQL> alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

第1 行附近出現錯誤[-530]:只允許在MOUNT狀態NORMAL模式下執行.

已用時間: 0.207(毫秒). 執行號:0.

SQL> 

SQL> alter database mount;

操作已執行

已用時間: 2.263(毫秒). 執行號:0.

SQL> select name,instance_name,status$ from v$instance;

行號     NAME INSTANCE_NAME STATUS$

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

1          DM01 DM01          MOUNT

已用時間: 0.678(毫秒). 執行號:513.

SQL> 

SQL> alter database rename logfile '/dm8/dmdbms/data/dm01/dm0103.log' to '/dm8/dmdbms/data/dm01/dm0103_1.log';

操作已執行

已用時間: 994.826(毫秒). 執行號:514.

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用時間: 0.786(毫秒). 執行號:515.

SQL> alter database open;

操作已執行

已用時間: 11.614(毫秒). 執行號:0.

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用時間: 0.272(毫秒). 執行號:516.

SQL> 

注意:在實際操作過程中,我們可以看到,在OPEN狀態下執行REDO日誌重新命名操作,是不被允許的,

會提示“[-530]:只允許在MOUNT狀態NORMAL模式下執行”錯誤。


5.刪除REDO日誌檔名

通過測試 alter database drop logfile 和 alter database delete logfile刪除重做日誌都報錯,說明達夢資料庫當前不支援刪除重做REDOLOG日誌

SQL> select file_id,path,rlog_size/1024/1024 as MB from v$rlogfile;

行號     FILE_ID     PATH                               MB                  

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

1          0           /dm8/dmdbms/data/dm01/dm0101.log   256

2          1           /dm8/dmdbms/data/dm01/dm0102.log   256

3          2           /dm8/dmdbms/data/dm01/dm0103_1.log 150

已用時間: 0.272(毫秒). 執行號:516.

SQL> 

SQL> alter database drop logfile file_id 2;

alter database drop logfile file_id 2;

                               *      

第 1 行, 第 32 列[drop]附近出現錯誤[-2007]:

語法分析出錯.

已用時間: 0.367(毫秒). 執行號:0.

SQL> 

SQL> alter database drop logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';


alter database drop logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

                               *                                 

第 1 行, 第 32 列[drop]附近出現錯誤[-2007]:

語法分析出錯.

已用時間: 0.172(毫秒). 執行號:0.

SQL> alter database drop logfile 'dm0103_1.log';

alter database drop logfile 'dm0103_1.log';


alter database drop logfile 'dm0103_1.log';

                               *           

第 1 行, 第 32 列[drop]附近出現錯誤[-2007]:

語法分析出錯.

已用時間: 0.280(毫秒). 執行號:0.

SQL> 

SQL> 

SQL> alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';


alter database delete logfile '/dm8/dmdbms/data/dm01/dm0103_1.log';

                                               *                   

第 1 行, 第 48 列[logfile]附近出現錯誤[-2007]:

語法分析出錯.

已用時間: 0.354(毫秒). 執行號:0.

SQL> alter database delete logfile file_id 2;

alter database delete logfile file_id 2;


alter database delete logfile file_id 2;

                                       *

第 1 行, 第 48 列[logfile]附近出現錯誤[-2007]:

語法分析出錯.

已用時間: 0.137(毫秒). 執行號:0.

SQL> 


達夢資料庫社群地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70017402/viewspace-2892469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章