摘要:在項目交付中,經常有人會問“如何在數據庫中查詢表的創建時間?” ,那么究竟如何在GaussDB(DWS)中查找對象的創建時間呢?本文提供3種方法作為參考,包括dba_objecs視圖查看方法、審計日志查看方法和CN日志查看方法。
本文分享自華為雲社區《GaussDB(DWS)實踐系列-GaussDB(DWS)如何查詢對象(表)的創建時間?》,原文作者:四葉草。
一、 背景描述
在項目交付中,經常有人會問“如何在數據庫中查詢表的創建時間?” ,那么究竟如何在GaussDB(DWS)中查找對象的創建時間呢?本文提供3種方法作為參考,包括dba_objecs視圖查看方法、審計日志查看方法和CN日志查看方法。
二、 操作演練
方法1:視圖查詢方法
DBA_OBJECTS視圖存儲了數據庫中所有數據庫對象的相關信息, GaussDB(DWS)支持通過DBA_OBJECTS視圖進行查詢,字段和詳細說明如下:
注意:需要有系統管理員權限才可以訪問。
其中對象的類型object_type字段會包括TABLE、INDEX、VIEW、RULE, PROCEDURE、TYPE、OPERATOR等,查詢時可根據該字段進行篩選:
1. 創建測試表
創建測試表,用於后續查詢測試。
--定義一個表,使用HASH分布。 CREATE TABLE employee_info ( id INTEGER NOT NULL, name VARCHAR(16) NOT NULL, tel VARCHAR(11), addr varchar(10) )DISTRIBUTE BY HASH(id); --查看當前系統時間。 select current_timestamp;
測試表創建完成后查看當前系統時間作為參考。
2. 查詢創建時間
通過DBA_OBJECTS視圖查看表對象創建時間。
select * from dba_objects where object_type='TABLE' and object_name='employee_info';
查詢結果如下:
3. 更新測試表
更新測試表employee_info,測試dba_objects視圖是否可以保存對象的最后修改時間,修改行為包括ALTER操作和GRANT、REVOKE操作:
--向表中增加一個varchar列group_info。 ALTER TABLE employee_info ADD group_info varchar(30); --查看當前系統時間。 select current_timestamp;
相關信息記錄如下:
4. 查看最后更新時間
通過DBA_OBJECTS視圖查看對象的最后更新時間。
select * from dba_objects where object_type='TABLE' and object_name='employee_info';
查詢結果如下:
方法2:審計日志查看方法
審計日志統計信息更全,打開審計總開關audit_enabled=on,並設置審計項audit_system_object。
audit_system_object參數說明: 該參數決定是否對GaussDB A數據庫對象的CREATE、DROP、ALTER操作進行審計。GaussDB A數據庫對象包括DATABASE、USER、schema、TABLE等。通過修改該配置參數的值,可以只審計需要的數據庫對象的操作。 取值范圍:整型,0~524287 Ø 0代表關閉數據庫對象的CREATE、DROP、ALTER操作審計功能。 Ø 非0代表只審計某類或者某些數據庫對象的CREATE、DROP、ALTER操作。 默認值:12295 換算成19位二進制為000 0011 0000 0000 0111
取值說明:該參數的值由19個二進制位的組合求出,這19個二進制位分別代表GaussDB (DWS)的19類數據庫對象。如果對應的二進制位取值為0,表示不審計對應的數據庫對象的CREATE、DROP、ALTER操作;取值為1,表示審計對應的數據庫對象的CREATE、DROP、ALTER操作。這19個二進制位代表的具體審計內容請參見表2。
12295 換算成19位二進制為000 0011 0000 0000 0111,修改第3位的值為1,表示審計TABLE對象的CREATE、DROP、ALTER、TRUNCATE操作,修改后的值為12303(對應的19位二進制為000 0011 0000 0000 1111)
參數設置如下:
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "audit_enabled=on" gs_guc reload -Z coordinator -Z datanode -N all -I all -c "audit_system_object=12303"
參數設置命令截圖:
設置成功:
按照方法1中的流程創建並更新測試表,記錄系統當前時間作為參照:
查看審計日志:
select * from pgxc_query_audit('2021-05-27 16:10:00','2021-05-27 16:20:00') where operation_type='ddl' and object_name='employee_info';
截圖如下:
方法3:CN日志查看方法
配置 postgresql.conf 配置文件,通過記錄表的 DDL 信息,從而確定表的創建時間。
log_statement參數介紹:
log_statement參數說明:控制記錄SQL語句。
該參數屬於SUSET類型參數,請參考表1中對應設置方法進行設置。即使log_statement設置為all,包含簡單語法錯誤的語句也不會被記錄,因為僅在完成基本的語法分析並確定了語句類型之后才記錄日志。
取值范圍:枚舉類型
•none表示不記錄語句。
•ddl表示記錄所有的數據定義語句,比如CREATE、ALTER和DROP語句。
•mod表示記錄所有DDL語句,還包括數據修改語句INSERT、UPDATE、DELETE、TRUNCATE和COPY FROM 。
•all表示記錄所有語句,PREPARE、EXECUTE和EXPLAIN ANALYZE語句也同樣被記錄。
默認值:none
log_statement參數設置方法:
--登錄CN所在的數據節點,執行 source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile gs_guc reload -Z coordinator -Z datanode -N all -I all -c "log_statement=ddl"
參數設置命令截圖:
查看對應時間點的CN日志,可以記錄表的創建時間,詳細如下。