mysql hextoraw_ORA-03001: unimplemented feature 错误处理

今天,邮箱收到生产库alert错误日志,再次证明我的alert日志监控脚本还是很好用的。

环境:

oracle Database 11g Enterprise Edition Release 11.1.0.6.0

System name:    Linux

Release:        2.6.18-238.19.1.el5xen

-----------------------alert log-----------------------------

Sun Dec 02 22:01:41 2012

GATHER_STATS_JOB encountered errors.  Check the trace file.

Errors in file /var/u01/app/oracle/diag/rdbms/ora001/xxxx/trace/down_j000_17028.trc:

ORA-03001: unimplemented feature

------------------------------------------------------------------

vim  /var/u01/app/oracle/diag/rdbms/ora001/xxxx/trace/down_j000_17028.trc:

--------------------------------trace file-----------------------------------

.......省略无用信息..........

ORA-03001: unimplemented feature

*** 2012-12-02 22:01:41.172

GATHER_STATS_JOB: GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"','""', ...)

ORA-03001: unimplemented feature

------------------------------------------------------------------

1.通过alert日志和trace文件,基本断定是自动收集统计信息时出现的错误。

手动收集ANONYMOUSUSER_GAME_PHONE表的统计信息,报同样的错误。

SQL> exec DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"');

BEGIN DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"'); END;

*

ERROR at line 1:

ORA-03001: unimplemented feature

ORA-06512: at "SYS.DBMS_STATS", line 17806

ORA-06512: at "SYS.DBMS_STATS", line 17827

ORA-06512: at line 1

2.收集ANONYMOUSUSER_GAME_PHONE的统计信息过程中,是什么造成出错呢?

利用3001 event获得错误换因

SQL> alter session set events '3001 trace name ERRORSTACK level 3';  --errorstack追踪出问题的SQL语句。

Session altered.

SQL> exec DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"');

BEGIN DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"'); END;

*

ERROR at line 1:

ORA-03001: unimplemented feature

ORA-06512: at "SYS.DBMS_STATS", line 17806

ORA-06512: at "SYS.DBMS_STATS", line 17827

ORA-06512: at line 1

3.找出trace文件

SQL> SELECT      d.VALUE

|| '/'

|| LOWER (RTRIM (i.INSTANCE, CHR (0)))

|| '_ora_'

|| p.spid

|| '.trc'

AS "trace_file_name"

FROM   (SELECT   p.spid

FROM   v$mystat m, v$session s, v$process p

WHERE   m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,

(SELECT   t.INSTANCE

FROM   v$thread t, v$parameter v

WHERE   v.NAME = 'thread'

AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,

(SELECT   VALUE FROM   v$parameter WHERE   NAME = 'user_dump_dest') d;  2    3    4    5    6    7    8    9   10   11   12   13   14   15

trace_file_name

--------------------------------------------------------------------------------

/var/u01/app/oracle/diag/rdbms/ora001/xxxx/trace/down_ora_29468.trc

vim /var/u01/app/oracle/diag/rdbms/ora001/xxxx/trace/down_ora_29468.trc

---------------------------------------

----- Error Stack Dump -----

ORA-03001: unimplemented feature

----- Current SQL Statement for this session (sql_id=8hrxz5wm16svn) -----

select /*+ no_parallel_index(t, "IND_ANON_GAME_PHONE_MD5ID") dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_expand index_ffs(t,"IND_ANON_GAME_PHONE_MD5ID") */ count(*) as nrw,count(distinct sys_op_lbid(228868,'L',t.rowid)) as nlb,count(distinct hextoraw(sys_op_descend("MD5ID")||sys_op_descend(1))) as ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as clf from "LOAD"."ANONYMOUSUSER_GAME_PHONE" sample block (  2.9579513853,1)  t where "MD5ID" is not null or 1 is not null

----- PL/SQL Stack -----

----- PL/SQL Call Stack -----

object      line  object

handle    number  name

0x3ee81c648     12114  package body SYS.DBMS_STATS

-------------------------------------------------------------------------------------------------

单独运行问题SQL,报同样的错误。

SQL> select /*+ no_parallel_index(t, "IND_ANON_GAME_PHONE_MD5ID") dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_expand index_ffs(t,"IND_ANON_GAME_PHONE_MD5ID") */ count(*) as nrw,count(distinct sys_op_lbid(228868,'L',t.rowid)) as nlb,count(distinct hextoraw(sys_op_descend("MD5ID")||sys_op_descend(1))) as ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as clf from "LOAD"."ANONYMOUSUSER_GAME_PHONE" sample block (  2.9579513853,1)  t where "MD5ID" is not null or 1 is not null;

select /*+ no_parallel_index(t, "IND_ANON_GAME_PHONE_MD5ID") dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_expand index_ffs(t,"IND_ANON_GAME_PHONE_MD5ID") */ count(*) as nrw,count(distinct sys_op_lbid(228868,'L',t.rowid)) as nlb,count(distinct hextoraw(sys_op_descend("MD5ID")||sys_op_descend(1))) as ndk,sys_op_countchg(substrb(t.rowid,1,15),1) as clf from "LOAD"."ANONYMOUSUSER_GAME_PHONE" sample block (  2.9579513853,1)  t where "MD5ID" is not null or 1 is not null

*

ERROR at line 1:

ORA-03001: unimplemented feature

查看IND_ANON_GAME_PHONE_MD5ID 创建语句,它是个函数索引,md5id列有空值,为了避免查null值不走索引,所以在("MD5ID",1)上建成函数索引

CREATE INDEX "LOAD"."IND_ANON_GAME_PHONE_MD5ID" ON "LOAD"."ANONYMOUSUSER_GAME_PHONE"

(

"MD5ID",

1

)

4.删除索引IND_ANON_GAME_PHONE_MD5ID,再次收集统计信息

SQL> drop index IND_ANON_GAME_PHONE_MD5ID;

收集统计信息,不报错,确定问题出在函数索引IND_ANON_GAME_PHONE_MD5ID上

SQL> exec DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"');

PL/SQL procedure successfully completed.解决办法:SQL> CREATE INDEX "LOAD"."IND_ANON_GAME_PHONE_MD5ID" ON "LOAD"."ANONYMOUSUSER_GAME_PHONE"(MD5ID,'1' );

Index created.

再次收集统计信息,不再报错

SQL> exec DBMS_STATS.GATHER_TABLE_STATS('"LOAD"','"ANONYMOUSUSER_GAME_PHONE"');

PL/SQL procedure successfully completed.

参考:

MOS |ORA-03001: Unimplemented Feature when Running DBMS_STATS.GATHER_INDEX_STATS [ID 559389.1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
grant execute on dbms_crypto to system; -- 第一个代码块 declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw); decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; -- 第二个代码块 declare l_src_data varchar2(20); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_encval raw(2000); cursor secret_cursor is select phonenumber from customer; begin open secret_cursor; loop fetch secret_cursor into l_src_data; exit when secret_cursor%notfound; l_encval := dbms_crypto.encrypt(src => utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); dbms_output.put_line(l_encval); end loop; close secret_cursor; end; -- 第三个代码块 declare l_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad'); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_decval raw(200); begin l_decval := dbms_crypto.decrypt(src => l_src_data, typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; -- SQL 查询语句 SELECT Price FROM PRODUCT WHERE ProductID = 5;declare * ERROR at line 18: ORA-06550: line 18, column 1: PLS-00103: Encountered the symbol "DECLARE"报错
05-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值