Java教程

在数据库中如何查询表的创建时间?

本文主要是介绍在数据库中如何查询表的创建时间?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

摘要:在项目交付中,经常有人会问“如何在数据库中查询表的创建时间?” ,那么究竟如何在 GaussDB(DWS)中查找对象的创建时间呢?本文提供 3 种方法作为参考,包括 dba_objecs 视图查看方法、审计日志查看方法和 CN 日志查看方法。

本文分享自华为云社区《GaussDB(DWS)实践系列-GaussDB(DWS)如何查询对象(表)的创建时间?》,原文作者:四叶草。

一、 背景描述

在项目交付中,经常有人会问“如何在数据库中查询表的创建时间?” ,那么究竟如何在GaussDB(DWS)中查找对象的创建时间呢?本文提供3种方法作为参考,包括dba_objecs视图查看方法、审计日志查看方法和CN日志查看方法。

二、 操作演练

方法1:视图查询方法

DBA_OBJECTS视图存储了数据库中所有数据库对象的相关信息, GaussDB(DWS)支持通过DBA_OBJECTS视图进行查询,字段和详细说明如下:

4485811fc1601fe0fc4cf78f231fa964.jpeg

注意:需要有系统管理员权限才可以访问。

 

其中对象的类型object_type字段会包括TABLE、INDEX、VIEW、RULE, PROCEDURE、TYPE、OPERATOR等,查询时可根据该字段进行筛选:

18f564048b2915a2c7be6e63bdfff195.jpeg

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;

测试表创建完成后查看当前系统时间作为参考。

a861f09380206d76b79a81a668ace130.jpeg

2. 查询创建时间

通过DBA_OBJECTS视图查看表对象创建时间。

select * from dba_objects where object_type='TABLE' and object_name='employee_info';

查询结果如下:

fd7428c3826318325d090279ceec88e2.jpeg

3. 更新测试表

更新测试表employee_info,测试dba_objects视图是否可以保存对象的最后修改时间,修改行为包括ALTER操作和GRANT、REVOKE操作:

--向表中增加一个varchar列group_info。

ALTER TABLE employee_info ADD group_info varchar(30);

--查看当前系统时间。

select current_timestamp;

相关信息记录如下:

2e80e2752554a2135cbd1b2566ca6afd.jpeg

4. 查看最后更新时间

通过DBA_OBJECTS视图查看对象的最后更新时间。

select * from dba_objects where object_type='TABLE' and object_name='employee_info';

查询结果如下:

d1ed0d74069fdae3182b90bf8caa5be7.jpeg

方法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。

a8a88e423b0f9e5147a52382b32742b1.jpeg

cd90339de962075e20be20479feba14e.jpeg

12295 换算成19位二进制为000 0011 0000 0000 0111,修改第3位的值为1,表示审计TABLE对象的CREATE、DROP、ALTER、TRUNCATE操作,修改后的值为12303(对应的19位二进制为0000011 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"

参数设置命令截图:

4538ad014c33f7c51f5b38cac4c0c508.jpeg

设置成功:

4c18af40115a801a51c79e70f6980e9f.jpeg

按照方法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';

截图如下:

3591391057b8c645fa7167b2a3106e28.jpeg

方法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"

参数设置命令截图:

662677bac512dbb5559e8933a6d283a1.jpeg

查看对应时间点的CN日志,可以记录表的创建时间,详细如下。

1c9e4559b053e95728b7ac10e189267c.jpeg

 

点击关注,第一时间了解华为云新鲜技术~



这篇关于在数据库中如何查询表的创建时间?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!