对于CREATE / ALTER / GRANT语句,Oracle-sql_text被截断为20个字符?

时间:2014-12-23 15:48:28

标签: oracle oracle11g

我似乎遇到了一个奇怪的问题,Oracle没有存储/返回查询的完整SQL文本。当我注意到所有v$session个查询的v$sqltext值都被截断为20个字符时,我正在监控当前有效的查询CREATE TABLE ____ AS sql_text

例如:

SQL> SELECT sql_text, LENGTH(sql_text), sql_fulltext, LENGTH(sql_fulltext) FROM v$sql WHERE sql_id = 'sql_id_here';

SQL_TEXT                            LENGTH(SQL_TEXT) SQL_FULLTEXT                        LENGTH(SQL_FULLTEXT)
----------------------------------- ---------------- ----------------------------------- --------------------
create table schema.                              20 create table schema.                                  20

1 row selected.


SQL> SELECT sql_text, LENGTH(sql_text) FROM v$sqltext WHERE sql_id = 'sql_id_here';

SQL_TEXT                            LENGTH(SQL_TEXT)
----------------------------------- ----------------
create table schema.                              20

1 row selected.

SQL> SELECT sql_text, LENGTH(sql_text) FROM v$sqltext_with_newlines WHERE sql_id = 'sql_id_here';

SQL_TEXT                            LENGTH(SQL_TEXT)
----------------------------------- ----------------
create table schema.                              20

1 row selected.

我认为这可能是一个孤立的事件,因此我检查了CREATE TABLE所有 v$sqltext个条目:

SELECT sql_id, COUNT(*) AS entries, SUM(LENGTH(sql_text)) AS query_len
FROM v$sqltext
WHERE sql_id IN (
    SELECT sql_id
    FROM v$sqltext
    WHERE piece = 0
      AND UPPER(sql_text) LIKE 'CREATE TABLE%'
)
GROUP BY sql_id
ORDER BY 1, 2, 3

超过250多个sql_id条目,所有条目都有entries = 1query_len = 20

但是,如果我在查询完成后检查dba_audit_trail(假设我事先知道正在创建哪个表),则会在那里显示完整的sql_text。

我发生了什么以及如何解决此问题,v$sqltext包含CREATE TABLE ___ AS语句的完整查询?


修改:仔细检查后,所有GRANTCREATEALTER查询在v$sqltext中被截断为20个字符。所有其他查询都包含其全文。我打开奖金,希望能够深究这一点。

1 个答案:

答案 0 :(得分:3)

这看起来像是11.2.0.4的已知问题。如果您有权访问My Oracle Support,请查看错误19634213;和错误18431964,20308798和18245071(不公开)。我显然无法详细说明或重现他们所说的话。根据nop77svk的评论,它可能已在12c中修复,但也可能是特定于平台的。

如果这导致了问题,您需要向Oracle提出服务请求以验证您是否正在尝试相同的事情,并找出补丁是否可用。