华为云用户手册

  • 语法格式 CREATE AUDIT POLICY [ IF NOT EXISTS ] policy_name { { privilege_audit_clause | access_audit_clause } [, ... ] [ filter_group_clause ] [ ENABLE | DISABLE ] }; privilege_audit_clause: 1 PRIVILEGES { DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ] access_audit_clause: AC CES S { DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  • 示例 创建一个对数据库执行CREATE的审计策略。 --创建adt1策略。 gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; --查看adt1策略。 gaussdb=# SELECT * FROM GS_AUDITING_POLICY; polname | polcomments | modifydate | polenabled ---------+-------------+----------------------------+------------ adt1 | | 2023-11-06 16:41:40.947417 | t --查看审计策略的存放位置。 gaussdb=# SHOW audit_directory; --删除审计策略adt1。 gaussdb=# DROP AUDIT POLICY adt1; 创建一个审计策略,仅审计用户dev_audit进行CREATE操作 。 --创建dev_audit用户。 gaussdb=# CREATE USER dev_audit PASSWORD '********'; --创建一个表tb_for_audit。 gaussdb=# CREATE TABLE tb_for_audit(col1 text, col2 text, col3 text); --创建基于tb_for_audit表的adt_lb0资源标签。 gaussdb=# CREATE RESOURCE LABEL adt_lb0 add TABLE(public.tb_for_audit); --创建针对adt_lb0资源进行CREATE操作的adt2审计策略。 gaussdb=# CREATE AUDIT POLICY adt2 PRIVILEGES CREATE ON LABEL(adt_lb0) FILTER ON ROLES(dev_audit); --删除审计策略adt2。 gaussdb=# DROP AUDIT POLICY adt2; --删除表tb_for_audit。 gaussdb=# DROP TABLE tb_for_audit; --删除dev_audit用户。 gaussdb=# DROP USER dev_audit; 创建一个仅审计记录用户dev_audit,客户端工具为gsql,IP地址为'10.20.30.40', '127.0.0.0/24',在执行针对adt_lb0资源进行的SELECT、INSERT、DELETE操作数据库的审计策略。 --创建dev_audit用户。 gaussdb=# CREATE USER dev_audit PASSWORD '********'; --创建审计策略adt3。 gaussdb=# CREATE AUDIT POLICY adt3 ACCESS SELECT ON LABEL(adt_lb0), INSERT ON LABEL(adt_lb0), DELETE FILTER ON ROLES(dev_audit), APP(gsql), IP('10.20.30.40', '127.0.0.0/24'); --删除审计策略adt3。 gaussdb=# DROP AUDIT POLICY adt3; --删除dev_audit用户。 gaussdb=# DROP USER dev_audit;
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符命名规范,且最大长度不超过63个字符。若超过63个字符,数据库会截断并保留前63个字符当作审计策略名称。当审计策略名称中包含大写字母时,数据库会自动转换为小写字母,如果需要创建包含大写字母的审计策略名称则需要使用双引号括起来。 标识符需要为小写字母(a-z)、大写字母(A-Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。 resource_label_name 资源标签名称。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW。 取值为ANALYZE时,ANALYZE和VACUUM操作都会被审计。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 ALL 指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL | ALL }时,ALL指所有DDL操作;当形式为{ DML | ALL }时,ALL指所有DML操作。 FILTER_TYPE 描述策略过滤的条件类型,包括APP、ROLES、IP。 filter_value 指具体过滤信息内容。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 --设置所处的时区。 gaussdb=# SET TIME ZONE 'PST8PDT'; --设置模式搜索路径。 gaussdb=# SET search_path TO tpcds, public; --设置客户端编码集。 gaussdb=# SET client_encoding TO utf8; --设置XML的解析方式。 gaussdb=# SET XML OPTION DOCUMENT; --把日期时间风格设置为传统的 POSTGRES 风格(日在月前)。 gaussdb=# SET datestyle TO postgres,dmy; --SET自定义用户变量的功能。 gaussdb=# CREATE DATABASE user_var DBCOMPATIBILITY 'B'; gaussdb=# \c user_var user_var=# SET b_format_behavior_compat_options = enable_set_variables; user_var=# SET @v1 := 1, @v2 := 1.1, @v3 := true, @v4 := 'dasda', @v5 := x'41'; --查询自定义用户变量。 user_var=# SELECT @v1, @v2, @v3, @v4, @v5, @v6, @v7; @v1 | @v2 | @v3 | @v4 | @v5 | @v6 | @v7 -----+-----+-----+-------+----------+-----+----- 1 | 1.1 | 1 | dasda | 01000001 | | (1 row) --PREPARE语法使用自定义用户变量。 user_var=# SET @sql = 'select 1'; user_var=# PREPARE stmt as @sql; user_var=# EXECUTE stmt; user_var=# \c postgres --删除数据库。 gaussdb=# DROP DATABASE user_var;
  • 语法格式 设置所处的时区。 SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }; 设置所属的模式。 SET [ SESSION | LOCAL ] {CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | SCHEMA 'schema'}; 设置客户端编码集。 SET [ SESSION | LOCAL ] NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT}; 设置其他运行时参数。 SET [ SESSION | LOCAL ] {config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }};
  • 参数说明 SESSION 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现,则SESSION为缺省值。 如果在事务中执行了此命令,命令的产生影响将在事务回滚之后消失。如果该事务已提交,影响将持续到会话的结束,除非被另外一个SET命令重置参数。 LOCAL 声明的参数只在当前事务中有效。在COMMIT或ROLLBACK之后,会话级别的设置将再次生效。 不论事务是否提交,此命令的影响只持续到当前事务结束。一个特例是:在一个事务里面,既有SET命令,又有SET LOCAL命令,且SET LOCAL在SET后面,则在事务结束之前,SET LOCAL命令会起作用,但事务提交之后,则是SET命令会生效。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。如果模式名不存在,会导致CURRENT_SCHEMA值为空。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 例如:set schema 'public'; NAMES {'charset_name' [COLLATE 'collation_name'] | DEFAULT}; 在B兼容模式下,并在设置b_format_version='5.7'、b_format_dev_version='s2';时,支持指定collate子句。 用于设置客户端字符编码,常量字符串的字符集、字符序,及返回结果的字符集。 等价于: set client_encoding = charset_name; set character_set_connection = charset_name; set collation_connection = collation_name; set character_set_results = charset_name; 取值范围:B兼容模式下支持的字符集,字符序。暂不支持指定charset_name与数据库字符集不同。 其他场景下不支持指定collate子句。 用于设置客户端的字符编码。 等价于: set client_encoding to charset_name 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。 SESSION | @@SESSION. | @@ 声明的参数生效方式为superuser、user,可通过pg_settings系统视图的context字段确定,如果没有出现GLOBAL /SESSION,则SESSION为缺省值。支持config_parameter赋值为表达式。 SET SESSION 只有在兼容B模式下(sql_compatibility = 'B')支持,并且GUC参数b_format_behavior_compat_options设置值包含 enable_set_variables的场景下才支持(SET b_format_behavior_compat_options = 'enable_set_variables';)。 使用@@config_parameter进行操作符运算时,尽量使用空格隔开。比如set @@config_parameter1=@@config_parameter1*2; 命令中,会将=@@当做操作符,可将其修改为set @@config_parameter1= @@config_parameter1 * 2 。
  • ADM_OBJE CTS ADM_OBJECTS视图显示数据库中所有数据库对象的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_OBJECTS字段 名称 类型 描述 owner name 对象的所有者。 object_name name 对象的名称。 object_id oid 对象的OID。 object_type name 对象的类型。例如table,schema,index等。 namespace oid 对象所在的命名空间。 temporary character(1) 对象是否为临时对象。 status character varying(7) 对象的状态。 valid:有效。 invalid:已失效。 subobject_name name 对象的子对象名称。 generated character(1) 对象名称是否是系统生成。 created timestamp with time zone 对象的创建时间。 last_ddl_time timestamp with time zone 对象的最后修改时间。 default_collation character varying(100) 对象的默认排序规则。 data_object_id numeric 暂不支持,值为NULL。 timestamp character varying(19) 暂不支持,值为NULL。 secondary character varying(1) 暂不支持,值为NULL。 edition_name character varying(128) 暂不支持,值为NULL。 sharing character varying(18) 暂不支持,值为NULL。 editionable character varying(1) 暂不支持,值为NULL。 oracle_maintained character varying(1) 暂不支持,值为NULL。 application character varying(1) 暂不支持,值为NULL。 duplicated character varying(1) 暂不支持,值为NULL。 sharded character varying(1) 暂不支持,值为NULL。 created_appid numeric 暂不支持,值为NULL。 modified_appid numeric 暂不支持,值为NULL。 created_vsnid numeric 暂不支持,值为NULL。 modified_vsnid numeric 暂不支持,值为NULL。 created和last_ddl_time支持的范围参见PG_OBJECT中的记录范围。 父主题: 其他系统视图
  • 逻辑解码 在逻辑解码独立多版本字典中,使用的逻辑解码字典表是系统表。逻辑解码系统表均为实例级系统表,仅管理员权限用户可以查看和修改系统表。 GS_LOGICAL_ATTRDEF GS_LOGICAL_ATTRIBUTE GS_LOGICAL_AUTHID GS_LOGICAL_CLASS GS_LOGICAL_CONSTRAINT GS_LOGICAL_DATABASE GS_LOGICAL_DICTIONARY GS_LOGICAL_INDEX GS_LOGICAL_NAMESPACE GS_LOGICAL_PARTITION GS_LOGICAL_TYPE GS_SQLAPPLY_SKIP GS_TXN_LSN_TIME GS_LOGICAL_SET GS_LOGICAL_ENUM 父主题: 系统表
  • GLOBAL_THREAD_WAIT_STATUS 通过该视图可以检测所有节点上工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况,如表1所示。具体事件信息请参见表 等待状态列表、表 轻量级锁等待事件列表、表 IO等待事件列表和表 事务锁等待事件列表。 通过GLOBAL_THREAD_WAIT_STATUS视图,可以查看数据库全局各个节点上所有SQL语句产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态,从而更容易定位hang以及类似现象的原因。 GLOBAL_THREAD_WAIT_STATUS视图和THREAD_WAIT_STATUS视图列定义完全相同,这是由于GLOBAL_THREAD_WAIT_STATUS视图本质是到数据库中各个节点上查询THREAD_WAIT_STATUS视图汇总的结果。 表1 GLOBAL_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 节点名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint session的ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint streaming线程的父线程。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表 等待状态列表。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、I/O的信息。否则是空。 locktag text 当前线程正在等待锁的信息。 lockmode text 当前线程正等待获取的锁模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 父主题: Session/Thread
  • 注意事项 只有拥有表INSERT权限的用户,才可以向表中插入数据。用户被授予INSERT ANY TABLE权限,相当于用户对除系统模式之外的任何模式具有USAGE权限,并且拥有这些模式下表的INSERT权限。 如果使用RETURNING子句,用户必须要有该表的SELECT权限。 如果使用ON DUPLICATE KEY UPDATE,用户必须要有该表的INSERT、UPDATE权限,UPDATE子句中列的SELECT权限。 如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 生成列不能被直接写入。在INSERT命令中不能为生成列指定值,但是可以指定关键字DEFAULT。 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的INSERT语句中(不包含外表的场景下),对目标表中CHAR和VARCHAR类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
  • 语法格式 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT [/*+ plan_hint */] [ IGNORE ] INTO table_name [ { [alias_name] [ ( column_name [, ...] ) ] } | { [partition_clause] [ AS alias ] [ ( column_name [, ...] ) ] } ] { DEFAULT VALUES | { VALUES | VALUE } {( { expression | DEFAULT } [, ...] ) }[, ...] | query } [ { ON DUPLICATE KEY UPDATE { NOTHING | { column_name = { expression | DEFAULT } } [, ...] [ WHERE condition ] } } | { [ ON CONFLICT [ conflict_target ] conflict_action ] } ] [ RETURNING {* | {output_expression [ [ AS ] output_name ] }[, ...]} ];
  • 示例 插入一条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t1(col1 INT,col2 VARCHAR); --插入数据。 gaussdb=# INSERT INTO test_t1 (col1, col2) VALUES (1,'AB'); --只给表中部分列插入数据。 gaussdb=# INSERT INTO test_t1 (col1) VALUES (2); --VALUES关键字左边没有括号,右边括号里面必须严格按照表结构的顺序给所有的字段添加值。 gaussdb=# INSERT INTO test_t1 VALUES (3,'AC'); --查询表。 gaussdb=# SELECT * FROM test_t1; col1 | col2 ------+------ 1 | AB 2 | 3 | AC (3 rows) --删除表。 gaussdb=# DROP TABLE test_t1; 插入多条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR); gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR); --插入多条数据。 gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC'); --查询表。 gaussdb=# SELECT * FROM test_t2; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --把test_t2中的数据插入到test_t3中。 gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2; --查询表。 gaussdb=# SELECT * FROM test_t3; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --删除表。 gaussdb=# DROP TABLE test_t2; gaussdb=# DROP TABLE test_t3; ON DUPLICATE KEY UPDATE 示例: --建表。 gaussdb=# CREATE TABLE test_t4 (id INT PRIMARY KEY, info VARCHAR(10)); gaussdb=# INSERT INTO test_t4 VALUES (1, 'AA'), (2,'BB'), (3, 'CC'); --使用ON DUPLICATE KEY UPDATE关键字。 gaussdb=# INSERT INTO test_t4 VALUES (3, 'DD'), (4, 'EE') ON DUPLICATE KEY UPDATE info = VALUES(info); --查询表。 gaussdb=# SELECT * FROM test_t4; id | info ----+------ 1 | AA 2 | BB 4 | EE 3 | DD --删除表。 gaussdb=# DROP TABLE test_t4; ON CONFLICT 示例: -- 建表。 gaussdb=# CREATE DATABASE pg_db dbcompatibility = 'PG'; gaussdb=# \c pg_db pg_db=# CREATE TABLE insert_onconflict_tb1(a INT PRIMARY KEY, b INT, c VARCHAR2(20)); pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 2, 'aaa'), (2, 0, 'zzz'); -- 查询表。 pg_db=# SELECT * FROM insert_onconflict_tb1; a | b | c ---+---+----- 1 | 2 | aaa 2 | 0 | zzz (2 rows) -- 使用ON CONFLICT关键字。 pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 5, 'ddd'), (2, 1, 'yyy') ON CONFLICT (a) DO UPDATE SET b=excluded.b, c=excluded.c; pg_db=# INSERT INTO insert_onconflict_tb1 VALUES (1, 5, 'ddd'), (2, 1, 'yyy') ON CONFLICT (a) DO NOTHING; --查询表。 pg_db=# SELECT * FROM insert_onconflict_tb1; a | b | c ---+---+----- 1 | 5 | ddd 2 | 1 | yyy (2 rows) -- 删除表。 pg_db=# DROP TABLE insert_onconflict_tb1; pg_db=# \c postgres -- 删除pg兼容的库。 gaussdb=# DROP DATABASE pg_db; INSERT IGNORE 示例1:破坏NOT NULL约束 --创建B兼容模式数据库。 gaussdb=# CREATE DATABASE test DBCOMPATIBILITY ='B'; gaussdb=# \c test --设置前置参数。 test=# set b_format_version = '5.7'; test=# set b_format_dev_version = 's1'; --建表。 test=# CREATE TABLE test_t5(f1 INT NOT NULL); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t5 VALUES(NULL); WARNING: null value in column "f1" violates not-null constraint DETAIL: Failing row contains (null). INSERT 0 1 --查询表。 test=# SELECT * FROM test_t5; f1 ---- 0 (1 row) --删除表。 test=# DROP TABLE test_t5; 示例2:唯一键冲突 --建表。 test=# CREATE TABLE test_t6(f1 INT PRIMARY KEY); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_t6_pkey" for table "test_t6" CREATE TABLE --插入数据。 test=# INSERT INTO test_t6 VALUES(1); INSERT 0 1 --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t6 VALUES(1); WARNING: duplicate key value violates unique constraint "test_t6_pkey" INSERT 0 0 --查询表。 test=# SELECT * FROM test_t6; f1 ---- 1 (1 row) --删除表。 test=# DROP TABLE test_t6; DROP TABLE 示例3:插入的值没有找到对应的分区 --建表。 test=# CREATE TABLE test_t7(f1 INT, f2 INT) PARTITION BY LIST(f1) (PARTITION p0 VALUES(1, 4, 7), PARTITION p1 VALUES (2, 5, 8)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t7 VALUES(3, 5); WARNING: inserted partition key does not map to any table partition INSERT 0 0 --查询表。 test=# SELECT * FROM test_t7; f1 | f2 ----+---- (0 rows) --删除表。 test=# DROP TABLE test_t7; DROP TABLE 示例4:指定分区插入时,插入的数据与指定的分区不匹配 --建表。 test=# CREATE TABLE test_t8(f1 INT NOT NULL, f2 TEXT, f3 INT) PARTITION BY RANGE(f1)(PARTITION p0 VALUES LESS THAN(5), PARTITION p1 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(15), PARTITION p3 VALUES LESS THAN(MAXVALUE)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t8 PARTITION(p2) VALUES(20, 'Jan', 1); WARNING: inserted partition key does not map to the table partition DETAIL: N/A. INSERT 0 0 --查询表。 test=# SELECT * FROM test_t8; f1 | f2 | f3 ----+----+---- (0 rows) --删除表。 test=# DROP TABLE test_t8; DROP TABLE 示例5:子查询返回多行 --建表。 test=# CREATE TABLE test_t9(f1 INT, f2 INT); CREATE TABLE --插入数据。 test=# INSERT INTO test_t9 VALUES(1, 1), (2, 2), (3, 3); INSERT 0 3 --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t9 VALUES((SELECT f1 FROM test_t9), 0); WARNING: more than one row returned by a subquery used as an expression CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t9 WHERE f2 = 0; f1 | f2 ----+---- | 0 (1 row) --删除表。 test=# DROP TABLE test_t9; DROP TABLE 示例6:数据过长 --建表。 test=# CREATE TABLE test_t10(f1 VARCHAR(5)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t10 VALUES('aaaaaaaaa'); WARNING: value too long for type character varying(5) CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t10; f1 ------- aaaaa (1 row) --删除表。 test=# DROP TABLE test_t10; DROP TABLE 示例7:时间函数溢出 --建表。 test=# CREATE TABLE test_t11(f1 DATETIME); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t11 VALUES(date_sub('2000-01-01', INTERVAL 2001 YEAR)); WARNING: Datetime function: datetime field overflow CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t11; f1 ---- (1 row) --删除表。 test=# DROP TABLE test_t11; DROP TABLE 示例8:被0除 --建表。 test=# CREATE TABLE test_t12(f1 INT); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t12 VALUES(1/0); WARNING: division by zero CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t12; f1 ---- (1 row) --删除表。 test=# DROP TABLE test_t12; DROP TABLE 示例9:值不正确 --建表。 test=# CREATE TABLE test_t13(f1 FLOAT); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t13 VALUES('1.11aaa'); WARNING: invalid input syntax for type real: "1.11aaa" LINE 1: INSERT IGNORE INTO test_t13 VALUES('1.11aaa'); ^ CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t13; f1 ------ 1.11 (1 row) --删除表。 test=# DROP TABLE test_t13; --删除数据库(请根据实际情况修改数据库名)。 test=# \c test; test=# DROP DATABASE test; 示例10:使用表别名插入一条数据 --建表。 gaussdb=# create table tb1 (va int , vb int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'va' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用表别名 gaussdb=# insert into tb1 as tt(tt.va, tt.vb) values (1,2); INSERT 0 1 gaussdb=# insert into tb1 tt(tt.va, tt.vb) values (3,4); INSERT 0 1 --查询表。 gaussdb=# select * from tb1; va | vb ----+---- 1 | 2 3 | 4 (2 rows) --删除表。 gaussdb=# DROP TABLE tb1; DROP TABLE WITH [ RECURSIVE ] with_query [, ...] 示例: --成绩表。 gaussdb=# CREATE TABLE grade ( sid INT, course VARCHAR(20), score FLOAT ); --学生表。 gaussdb=# CREATE TABLE student( sid INT PRIMARY KEY, class INT, name VARCHAR(50), sex INT CHECK (sex = 0 or sex = 1) ); --插入数据。 gaussdb=# WITH student_sid AS ( INSERT INTO student ( sid, CLASS, NAME, sex ) VALUES ( 1, 1, 'Scott', 1 ) RETURNING sid ) INSERT INTO grade ( sid, course, score ) VALUE ( ( SELECT sid FROM student_sid ), 'math', '96' ), ( ( SELECT sid FROM student_sid ), 'chinese', '82' ), ( ( SELECT sid FROM student_sid ), 'english', '86' ); --查询表。 gaussdb=# SELECT * FROM student; sid | class | name | sex -----+-------+-------+----- 1 | 1 | scott | 1 (1 row) gaussdb=# SELECT * FROM grade; sid | course | score -----+---------+------- 1 | math | 96 1 | chinese | 82 1 | english | 86 (3 rows) --删除表。 gaussdb=# DROP TABLE student; gaussdb=# DROP TABLE grade;
  • WDR Snapshot Schema WDR Snapshot在启动后(打开GUC参数enable_wdr_snapshot),会在用户表空间"pg_default",数据库"postgres"下的Snapshot Schema中创建对象,用于持久化WDR快照数据。默认初始化用户或monadmin用户可以访问和操作Snapshot Schema下的对象。 根据GUC参数wdr_snapshot_retention_days来自动管理快照的生命周期。 用户应该禁止对Snapshot Schema下的表进行增删改等操作,人为对这些表的修改或破坏可能会导致WDR各种异常情况甚至WDR不可用。 WDR Snapshot原信息 WDR Snapshot 数据表 父主题: Schema
  • 对象标识符类型 GaussDB 在内部使用对象标识符(OID)作为各种系统表的主键。系统不会自动为用户创建的表添加一个OID字段,OID类型表示一个对象标识符。对象标识符类型如表1所示。 目前OID类型用一个四字节的无符号整数实现。因此不建议在创建的表中使用OID字段做主键。 表1 对象标识符类型 名称 引用 描述 示例 OID - 数字化的对象标识符。 564182 CID - 命令标识符。它是系统字段cmin和cmax的数据类型。命令标识符是32位的量。 - XID - 事务标识符。它是系统字段xmin和xmax的数据类型。事务标识符是64位的量。 - TID - 行标识符。它是系统表字段ctid的数据类型。行ID是一对数值(块号,块内的行索引),它标识该行在其所在表内的物理位置。 - REGCONFIG pg_ts_config 文本搜索配置。 english REGDICTIONARY pg_ts_dict 文本搜索字典。 simple REGOPER pg_operator 操作符名。 - REGOPERATOR pg_operator 带参数类型的操作符。 *(integer,integer)或-(NONE,integer) REGPROC pg_proc 函数名称。 sum REGPROCEDURE pg_proc 带参数类型的函数。 sum(int4) REGCLASS pg_class 关系名。 pg_type REGTYPE pg_type 数据类型名。 integer OID类型:主要作为数据库系统表中字段使用。 示例: 1 2 3 4 5 gaussdb=# SELECT oid FROM pg_class WHERE relname = 'pg_type'; oid ------ 1247 (1 row) OID别名类型REGCLASS:主要用于对象OID值的简化查找。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 gaussdb=# SELECT attrelid,attname,atttypid,attstattarget FROM pg_attribute WHERE attrelid = 'pg_type'::REGCLASS; attrelid | attname | atttypid | attstattarget ----------+------------+----------+--------------- 1247 | xc_node_id | 23 | 0 1247 | tableoid | 26 | 0 1247 | cmax | 29 | 0 1247 | xmax | 28 | 0 1247 | cmin | 29 | 0 1247 | xmin | 28 | 0 1247 | oid | 26 | 0 1247 | ctid | 27 | 0 1247 | typname | 19 | -1 1247 | typnamespace | 26 | -1 1247 | typowner | 26 | -1 1247 | typlen | 21 | -1 1247 | typbyval | 16 | -1 1247 | typtype | 18 | -1 1247 | typcategory | 18 | -1 1247 | typispreferred | 16 | -1 1247 | typisdefined | 16 | -1 1247 | typdelim | 18 | -1 1247 | typrelid | 26 | -1 1247 | typelem | 26 | -1 1247 | typarray | 26 | -1 1247 | typinput | 24 | -1 1247 | typoutput | 24 | -1 1247 | typreceive | 24 | -1 1247 | typsend | 24 | -1 1247 | typmodin | 24 | -1 1247 | typmodout | 24 | -1 1247 | typanalyze | 24 | -1 1247 | typalign | 18 | -1 1247 | typstorage | 18 | -1 1247 | typnotnull | 16 | -1 1247 | typbasetype | 26 | -1 1247 | typtypmod | 23 | -1 1247 | typndims | 23 | -1 1247 | typcollation | 26 | -1 1247 | typdefaultbin | 194 | -1 1247 | typdefault | 25 | -1 1247 | typacl | 1034 | -1 1247 | typelemmod | 23 | -1 (39 rows) 父主题: 数据类型
  • 调优手段之GUC参数 查询优化的主要目的是为查询语句选择高效的执行方式。 如下SQL语句: 1 2 select count(1) from customer inner join store_sales on (ss_customer_sk = c_customer_sk); 在执行customer inner join store_sales的时候,GaussDB支持Nested Loop、Merge Join和Hash Join三种不同的Join方式。优化器会根据表customer和表store_sales的统计信息估算结果集的大小以及每种Join方式的执行代价,然后对比选出执行代价最小的执行计划。 正如前面所说,执行代价计算都是基于一定的模型和统计信息进行估算,当因为某些原因代价估算不能反映真实的cost的时候,就需要通过GUC参数设置的方式让执行计划倾向更优规划。例如:random_page_cost参数表示优化器计算一次非顺序抓取磁盘页面的开销,该参数默认值为4。当机器磁盘随机读取的速度较快时,比如SSD设备,可以将该参数的值适当调小,更改后,索引扫描的代价降低,生成计划时更倾向于选择索引扫描的方式。
  • 调优手段之统计信息 GaussDB优化器是典型的基于代价的优化(Cost-Based Optimization,简称CBO)。在这种优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。这些特征值就是统计信息。从上面描述可以看出统计信息是查询优化的核心输入,准确的统计信息将帮助优化器选择最合适的查询规划,一般来说通过ANALYZE语法收集整个表或者表的若干个字段的统计信息,周期性地运行ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯。 注意,DDL可能会导致统计信息发生变化,进而导致计划跳变。当表上做了DDL操作后,应注意统计信息是否需要重新收集。
  • PG_AUTOVAC_STATUS 通过该函数查看某表是否达到了AUTOVACUUM阈值,通常需要关注返回结果中的doanalyze和dovacuum两个值。视图各字段定义如下: 表1 PG_AUTOVAC_STATUS字段 名称 类型 描述 nspname text 名称空间名称。 relname text 表、索引、视图等对象名称。 nodename text 节点名称。 doanalyze Boolean 是否执行analyze。 anltuples bigint analyze tuple数量。 anlthresh bigint analyze阈值。 dovacuum Boolean 是否执行vacuum。 vactuples bigint vacuum tuple数量。 vacthresh bigint vacuum阈值。 执行结果如下: gaussdb=# select * from pg_autovac_status('t2'::regclass); nspname | relname | nodename | doanalyze | anltuples | anlthresh | dovacuum | vactuples | vacthresh ---------+---------+----------+-----------+-----------+-----------+----------+-----------+----------- public | t2 | sgnode | f | 0 | 2050 | t | 15002 | 4050 (1 row) 父主题: VACUUM
  • 示例 从用户joe收回角色jerry的权限。 1 2 3 4 5 6 7 8 9 10 11 12 --创建角色jerry。 gaussdb=# CREATE role jerry PASSWORD 'xxxxxxxxxx'; --将create any table权限授权给jerry,并允许该角色将权限授权给其他人。 gaussdb=# GRANT create any table TO jerry with admin option; --创建用户joe,将角色jerry的权限授权给该用户。 gaussdb=# CREATE user joe PASSWORD 'xxxxxxxxxxx'; gaussdb=# GRANT jerry TO joe; --从用户joe收回角色jerry的权限。 gaussdb=# REVOKE jerry FROM joe; 从用户tom收回系统权限。 1 2 3 4 5 6 7 8 --创建用户tom。 gaussdb=# CREATE USER tom PASSWORD 'xxxxxxxxxx'; --给tom用户授予系统权限。 gaussdb=# GRANT ALL PRIVILEGES TO tom; --从用户tom收回系统权限。 gaussdb=# REVOKE ALL PRIVILEGES FROM tom; 从用户joe收回对模式tpcds下表reason的SELECT权限。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --创建tpcds模式。 gaussdb=# CREATE SCHEMA tpcds; --在tpcds模式下创建reason表。 gaussdb=# CREATE TABLE tpcds.reason ( r_reason_sk INTEGER NOT NULL, r_reason_id CHAR(16) NOT NULL, r_reason_desc VARCHAR(20) ); --将tpcds.reason表查询权限授权给joe。 gaussdb=# GRANT select ON tpcds.reason TO joe; --从用户joe收回对模式tpcds下表reason的SELECT权限。 gaussdb=# REVOKE SELECT ON TABLE tpcds.reason FROM joe; 从用户joe收回对模式tpcds下函数fun1()的ALTER权限。 1 2 3 4 5 6 7 8 9 10 11 12 --创建fun1()函数。 gaussdb=# CREATE or replace FUNCTION tpcds.fun1() RETURN boolean AS BEGIN SELECT current_user; RETURN true; END; / --给joe用户授予对fun1()的ALTER权限。 gaussdb=# GRANT ALTER ON FUNCTION tpcds.fun1() TO joe; --从用户joe收回对模式tpcds下函数fun1的ALTER权限。 gaussdb=# REVOKE ALTER ON FUNCTION tpcds.fun1() FROM joe; 从用户joe收回对数据库testdb的CONNECT权限。 --创建数据库testdb。 gaussdb=# CREATE DATABASE testdb; --给joe用户授予连接testdb的权限。 gaussdb=# GRANT connect on database testdb TO joe WITH GRANT OPTION; --从用户joe收回对数据库testdb的CONNECT权限。 gaussdb=# REVOKE CONNECT ON database testdb FROM joe; 清除数据。 gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP FUNCTION tpcds.fun1(); gaussdb=# DROP SCHEMA tpcds CASCADE; gaussdb=# DROP USER joe; gaussdb=# DROP USER tom; gaussdb=# REVOKE create any table FROM jerry; gaussdb=# DROP ROLE jerry; gaussdb=# DROP DATABASE testdb;
  • 参数说明 关键字PUBLIC表示一个隐式定义的拥有所有角色的组。 权限类别和参数说明,请参见GRANT的参数说明。 任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。 指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。 如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,必须声明CASCADE,将所有依赖性权限都撤销。 一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITH ADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。 如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪一个包含的角色执行的该命令是不确定的。在这种场合下,最好的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。
  • 注意事项 非对象所有者试图在对象上REVOKE权限,命令按照以下规则执行: 如果授权用户没有该对象上的权限,则命令立即失败。 如果授权用户有部分权限,则只撤销那些有授权选项的权限。 如果授权用户没有授权选项,REVOKE ALL PRIVILEGES形式将发出一个错误信息,而对于其他形式的命令而言,如果是命令中指定名称的权限没有相应的授权选项,该命令将发出一个警告。 在PDB内执行REVOKE语句时指定ON DATABASE选项时,仅支持撤销PDB自身的CREATE权限(用于该PDB中的模式)。不支持在Non-PDB中对PDB执行REVOKE语句。
  • 语法格式 回收指定表或视图上权限。 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收表上指定字段权限。 REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定序列上权限,LARGE字段属性可选,回收语句不区分序列是否为LARGE。 1 2 3 4 5 6 7 REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE | ALTER | DROP | COMMENT }[, ...] | ALL [ PRIVILEGES ] } ON { [ [ LARGE ] SEQUENCE ] sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定数据库上权限。 REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定域上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定客户端加密主密钥上的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES] } ON CLIENT_MASTER_KEYS client_master_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定列加密密钥上的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | DROP } [, ...] | ALL [PRIVILEGES]} ON COLUMN_ENCRYPTION_KEYS column_encryption_keys_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定目录上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { READ | WRITE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON DIRECTORY directory_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定外部数据源上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定外部服务器上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定函数上权限。 REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定存储过程上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL PROCEDURE IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定过程语言上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定模式上权限。 REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定表空间上权限。 REVOKE [ GRANT OPTION FOR ] { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收指定类型上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 回收package对象的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [PRIVILEGES] } ON PACKAGE package_name [, ...] FROM {[GROUP] role_name | PUBLIC} [, ...] [ CASCADE | RESTRICT ]; 按角色回收角色上的权限。 REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ]; 回收角色上的sysadmin权限。 REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name;
  • STAT_DATABASE_CONFLICTS 显示数据库当前节点冲突状态的统计信息,如表1所示。在PDB仅显示本PDB的信息。 表1 STAT_DATABASE_CONFLICTS字段 名称 类型 描述 datid oid 数据库标识。 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: Object
  • enable_access_server_directory 参数说明:该参数表示是否允许非初始用户创建、修改和删除DIRECTORY对象。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许非初始用户创建、修改和删除DIRECTORY对象。 off:表示不允许非初始用户创建、修改和删除DIRECTORY对象。 默认值:off 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。 出于安全考虑,默认情况下,只有初始用户才能够创建、修改和删除DIRECTORY对象。 如果开启了enable_access_server_directory,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象;具有SYSADMIN权限的用户、directory对象的属主、被授予了该directory的DROP权限的用户或者继承了内置角色gs_role_directory_drop权限的用户可以删除directory对象;具有SYSADMIN权限的用户和directory对象的属主可以修改directory对象的所有者,且要求该用户是新属主的成员。
  • enableSeparationOfDuty 参数说明:该参数表示是否开启三权分立选项。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启三权分立。 off:表示不开启三权分立。 默认值:off。在PDB场景内,若未设置该参数,则默认值为off。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数设置为on,系统管理员权限会受限制,部分之前可以执行的操作可能会无法执行。
  • audit_set_parameter 参数说明:该参数表示是否对SET操作进行审计。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0、1 0:表示关闭SET审计功能。 1:表示开启SET审计功能。 默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数设置为1,当数据库频繁执行SET操作时会频繁记录审计日志,导致性能下降。
  • audit_xid_info 参数说明:该参数表示是否在审计日志字段detail_info中记录SQL语句的事务ID。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0、1 0:表示关闭审计日志记录事务ID功能。 1:表示开启审计日志记录事务ID功能。 默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。 如果开启此开关,审计日志中detail_info信息则以xid开始,例如: detail_info: xid=14619 , create table t1(id int); 对于不存在事务ID的审计行为,则记录xid=NA。
  • enable_nonsysadmin_execute_direct 参数说明:该参数表示是否允许非系统管理员和非监控管理员执行EXECUTE DIRECT ON语句。该参数可在PDB级别设置。 参数类型:布尔型 参数单位:无 取值范围: on:表示允许任意用户执行EXECUTE DIRECT ON语句。 off:表示只允许系统管理员和监控管理员执行EXECUTE DIRECT ON语句。 默认值:off 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • audit_copy_exec 参数说明:这个参数表示是否对COPY操作进行审计。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0、1 0:表示关闭COPY审计功能。 1:表示开启COPY审计功能。 默认值:1。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数设置为1,当数据库频繁执行COPY操作时会频繁记录审计日志,导致性能下降。
  • audit_dml_state_select 参数说明:该参数表示是否对SELECT操作进行审计。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0、1 0:表示关闭SELECT操作审计功能。 1:表示开启SELECT操作审计功能。 默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数设置为1,当数据库频繁进行SELECT操作时会频繁记录审计日志,导致性能下降。
  • audit_function_exec 参数说明:该参数表示在执行存储过程、匿名块或自定义函数(不包括系统自带函数)时是否记录审计信息。该参数可在PDB级别设置。 参数类型:整型 参数单位:无 取值范围:0、1 0:表示关闭对存储过程、匿名块或自定义函数(不包括系统自带函数)执行的审计功能。 1:表示开启对存储过程、匿名块或自定义函数(不包括系统自带函数)执行的审计功能。 默认值:0。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SIGHUP类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:此参数设置为1,当数据库频繁执行存储过程、匿名块或自定义函数时会频繁记录审计日志,导致性能下降。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全