写点什么

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

发布于: 刚刚

摘要:在项目交付中,经常有人会问“如何在数据库中查询表的创建时间?” ,那么究竟如何在 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 位二进制为 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"
复制代码


参数设置命令截图:



设置成功:



按照方法 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 日志,可以记录表的创建时间,详细如下。



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

发布于: 刚刚阅读数: 2
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
在数据库中如何查询表的创建时间?