audit drop table为什么不行

audit drop table为什么不行

SQL> audit drop table;
audit drop table
      *
ERROR at line 1:
ORA-00956: missing or invalid auditing option


SQL> audit table;

Audit succeeded.


我看AUDIT_ACTIONS表中有drop table呀


刚看了一个帖子,也讲到这个事情。我的理解是这个帖子里只是说了这种情况,也没有给出原因。(英文的,看得比较吃力。如果理解有错,大佬给解释下)
帖子链接 http://www.dbasupport.com/forums/showthread.php?t=20054
这是我看到的主要的几个观点:

Yes u cannot audit DROP TABLE.This is because when you create a table you are the owner of the table and so you have all the priveleges.If you want to audit CREATE,DROP and other DDL commands write a database trigger on it.The database trigger works fine on Oracle 8.1.5 and higher versions.      这个说的是原因吗?实现这个功能可以用audit table(10.2.0.3),不知他的8.1.5不能吗

I think you performed those DROPs and CREATEs on user's own schema, that is why it seemed that the first two are not working while the last one is.

There is one odd thing with DROP TABLE and TRUNCATE TABLE statement auditing. You can't specify any of those two actions to be audited explicitely (ORA-956), like you can with CRATE TABLE. So you can't use "AUDIT DROP TABLE;" command. You can only set auditing for DROP and TRUNCATE by isuing "AUDIT TABLE;", which incorporates CREATE, TRUNCATE and DROP. So by setting "AUDIT TABLE;" audit trial will be created whenever someone isues CREATE TABLE, DROP TABLE or TRUNCATE TABLE statement.

BTW, I just noticed one strange thing on my test DB (8.1.7.1.2). AUDIT_TRIAL is set to TRUE. When I started auditing logins/logoffs by isuing "AUDIT SESSION", every new session has been audited immediately. But if I use any other auditing command (like "AUDIT TABLE;"), the table statements ussage was not audited until I restarted the database. After that everything went normal and audit trail has started to reflect the changes. I found this to be true for every auditing statement, except for AUDIT SESSION. I haven't found anything regarding this unusual behaviour in the documentation, so I think this is a bug. Can anyone else reproduce this?

提到了ORA-956


it's working now, I changed audit_trail=db to audit_trail=true and connected as sys with sysdba to audit the statements and works

I thought audit_trail has to be none, db or os?

我看有资料介绍true和db是一样的。我测试也是没区别的。不知道这位的works指的是什么

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/32939/viewspace-567198/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/32939/viewspace-567198/

<think>好的,我现在需要帮用户介绍openGauss中的ALTER TABLE命令。首先,我得回忆一下自己对ALTER TABLE的了解。这个命令在SQL中主要用于修改表结构,比如添加、删除列,修改数据类型,重命名表或者列,还有约束管理等等。不过openGauss可能有自己的特定语法或限制,所以我得确认一下。 接下来,我应该考虑用户可能的背景。用户可能是有数据库管理经验的开发者或DBA,他们需要了解在openGauss中如何具体使用ALTER TABLE。用户的需求可能是为了维护现有数据库结构,进行优化或者修复设计问题。他们可能想知道常见的操作示例,以及需要注意的事项,比如锁表问题、性能影响等。 然后,我需要整理ALTER TABLE的常见用法。比如添加列的基本语法,删除列,修改列的数据类型,重命名表和列,还有添加或删除约束,比如主键、唯一约束、外键、检查约束等。每个操作都需要给出具体的SQL示例,这样用户可以直接参考使用。 同时,必须注意openGauss的特定限制。例如,某些操作可能需要表被锁定,影响性能,或者不支持某些数据类型的直接修改。比如,修改列类型可能需要使用USING子句来指定转换规则,或者在某些情况下需要先删除约束再修改。这些细节很重要,用户如果忽略可能导致执行错误。 另外,用户可能关心分区表的相关操作,比如添加或删除分区。在openGauss中,处理分区表可能有特别的语法,比如ALTER TABLE ... ADD PARTITION,需要给出示例说明。 还要提醒用户注意事项,比如在生产环境谨慎操作,提前备份数据,避免锁表对业务的影响。可能还需要提到在线DDL的支持情况,如果有的话,但不确定openGauss的具体实现,可能需要查阅文档确认,但为了准确性,如果不太确定,可以建议用户参考官方文档或测试环境验证。 最后,结构要清晰,分点列出各个操作,每个部分用小标题,示例代码用正确的格式。同时,确保使用中文,避免技术术语翻译不当的问题。需要检查LaTeX格式是否正确,用户的问题中提到数学表达式,但这里可能不涉及,不过如果有示例中的代码,要用反引号包裹,但根据用户之前的系统指令,可能不需要LaTeX,而是代码块。不过原用户的问题中系统指令提到数学表达式使用$...$,但回答中主要是SQL代码,所以应该用代码块格式,比如用三个反引号包围。 不过根据用户给的系统级指令,可能他们希望行内代码用反引号,但原例子中的ALTER TABLE示例可能需要用代码块。需要确认用户的要求,但根据用户给的示例回答,他们使用了代码块,比如: ```sql ALTER TABLE table_name ADD column_name data_type; ``` 所以应该遵循这样的格式,使用三个反引号包裹代码示例。同时,确保中文描述清晰,分步骤说明,结构分明。 总结一下,回答的结构应该是先介绍ALTER TABLE的作用,然后分常见用法,每个用法给出语法和示例,接着是分区表操作,注意事项,最后总结。需要检查是否有遗漏的重要操作,比如修改列的顺序,设置默认值,或者修改存储参数等。如果有的话,也需要包含进去。 可能还需要注意openGauss是否支持某些高级功能,比如并发修改,或者与其它数据库(如PostgreSQL)的差异。但如果不确定的话,可以建议用户查阅官方文档或者进行测试,避免给出错误信息。 总之,整理出ALTER TABLE在openGauss中的主要用法,给出正确示例,提醒注意事项,确保回答准确有用。</think>以下是对openGauss中`ALTER TABLE`命令的详细介绍,按应用场景分类说明: --- ### 一、ALTER TABLE 基础功能 用于修改表结构定义,**需表级锁**,可能阻塞读写操作。 #### 1. 添加列 ```sql ALTER TABLE employees ADD COLUMN phone VARCHAR(20); ``` #### 2. 删除列 ```sql ALTER TABLE employees DROP COLUMN phone; ``` #### 3. 修改列类型 ```sql -- 需确保数据兼容 ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(10,2); ``` #### 4. 重命名列 ```sql ALTER TABLE employees RENAME COLUMN emp_id TO employee_id; ``` #### 5. 添加约束 ```sql -- 唯一约束 ALTER TABLE employees ADD CONSTRAINT uk_email UNIQUE(email); -- 外键约束 ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (cust_id) REFERENCES customers(id); ``` --- ### 二、高级修改操作 #### 1. 修改表存储参数 ```sql ALTER TABLE logs SET (fillfactor=70); -- 调整填充因子 ``` #### 2. 启用/禁用触发器 ```sql ALTER TABLE audit_log DISABLE TRIGGER ALL; -- 批量禁用触发器 ``` #### 3. 表空间迁移 ```sql ALTER TABLE large_table SET TABLESPACE fast_ssd; -- 需目标表空间有权限 ``` --- ### 三、分区表操作 #### 1. 添加分区 ```sql ALTER TABLE sales ADD PARTITION p_2024 VALUES LESS THAN ('2025-01-01'); ``` #### 2. 合并分区 ```sql ALTER TABLE sales MERGE PARTITIONS p_2022, p_2023 INTO PARTITION p_2022_2023; ``` #### 3. 交换分区 ```sql -- 与普通表交换数据 ALTER TABLE sales EXCHANGE PARTITION p_2023 WITH TABLE stage_sales; ``` --- ### 四、注意事项 1. **锁机制** 大表修改建议使用`ALTER TABLE ... SET (allow_concurrent_update = true)`(需确认版本支持) 2. **数据类型转换** 复杂类型转换需指定转换规则: ```sql ALTER TABLE devices ALTER COLUMN sensor_data TYPE JSONB USING sensor_data::JSONB; ``` 3. **依赖对象** 修改主键列时需先删除外键约束 4. **性能优化** 对亿级表添加列时,使用`ADD COLUMN ... DEFAULT ... NOT NULL`比先加列后更新更高效 --- ### 五、典型错误场景 ```sql -- 错误:尝试删除被外键引用的列 ALTER TABLE departments DROP COLUMN dept_id; -- 需先删除关联外键 -- 错误:不兼容的类型转换 ALTER TABLE products ALTER COLUMN price TYPE INT; -- 原数据含小数时会失败 ``` 建议操作前使用`EXPLAIN ALTER TABLE ...`查看执行计划(部分版本支持) --- 通过合理使用`ALTER TABLE`,可以完成90%以上的表结构变更需求。对于TB级表,建议通过逻辑复制或使用在线DDL工具进行变更。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值