1. 程式人生 > 其它 >在資料庫中如何查詢表的建立時間?

在資料庫中如何查詢表的建立時間?

摘要:在專案交付中,經常有人會問“如何在資料庫中查詢表的建立時間?” ,那麼究竟如何在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等。通過修改該配置引數的值,可以只審計需要的資料庫物件的操作。
取值範圍:整型,0524287
Ø  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日誌,可以記錄表的建立時間,詳細如下。

點選關注,第一時間瞭解華為雲新鮮技術~