在數據庫中如何查詢表的建立時間?

摘要:在項目交付中,常常有人會問「如何在數據庫中查詢表的建立時間?」 ,那麼究竟如何在GaussDB(DWS)中查找對象的建立時間呢?本文提供3種方法做爲參考,包括dba_objecs視圖查看方法、審計日誌查看方法和CN日誌查看方法。

本文分享自華爲雲社區《GaussDB(DWS)實踐系列-GaussDB(DWS)如何查詢對象(表)的建立時間?》,原文做者:四葉草。node

1、 背景描述

在項目交付中,常常有人會問「如何在數據庫中查詢表的建立時間?」 ,那麼究竟如何在GaussDB(DWS)中查找對象的建立時間呢?本文提供3種方法做爲參考,包括dba_objecs視圖查看方法、審計日誌查看方法和CN日誌查看方法。sql

2、 操做演練

方法1:視圖查詢方法

DBA_OBJECTS視圖存儲了數據庫中全部數據庫對象的相關信息, GaussDB(DWS)支持經過DBA_OBJECTS視圖進行查詢,字段和詳細說明以下:數據庫

注意:須要有系統管理員權限才能夠訪問。post

其中對象的類型object_type字段會包括TABLE、INDEX、VIEW、RULE, PROCEDURE、TYPE、OPERATOR等,查詢時可根據該字段進行篩選:測試

1. 建立測試表url

建立測試表,用於後續查詢測試。spa

--定義一個表,使用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;

測試表建立完成後查看當前系統時間做爲參考。.net

2. 查詢建立時間3d

經過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日誌,能夠記錄表的建立時間,詳細以下。

 

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

相關文章
相關標籤/搜索