关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。
?比如说我们拿dual表开刀,这个表是一个dummy表,里面的内容没有特定的意义,就是为了存在而存在。但是一旦这个表出现问题,所有相关的基础操作都会受到影响,后果不敢想象。
?来简单模拟一下,在个人的机器上开始做下面的尝试,drop 表dual
SQL> show user
?USER is "SYS"
?SQL>
?SQL> show parameter insta
?NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TYPE? ? ? ? VALUE
?------------------------------------ ----------- ------------------------------
?active_instance_count? ? ? ? ? ? ? ? integer
?cluster_database_instances? ? ? ? ? integer? ? 1
?instance_groups? ? ? ? ? ? ? ? ? ? ? string
?instance_name? ? ? ? ? ? ? ? ? ? ? ? string? ? ? TEST01
?instance_number? ? ? ? ? ? ? ? ? ? ? integer? ? 0
?instance_type? ? ? ? ? ? ? ? ? ? ? ? string? ? ? RDBMS
?open_links_per_instance? ? ? ? ? ? ? integer? ? 4
?parallel_instance_group? ? ? ? ? ? ? string
?parallel_server_instances? ? ? ? ? ? integer? ? 1
?SQL> drop table dual;? --运行这个命令也没有出现任何的问题
Table dropped.
SQL> select count(*)from dual;? --但是一旦开始尝试查询操作就会报出1775的错误。
select count(*)from dual
? ? ? ? ? ? ? ? ? ? *
?ERROR at line 1:
?ORA-01775: looping chain of synonyms
SQL> select *from dual;? ? ? ? ? ? ? --再次尝试,问题依旧,可以想象在线业务系统出现这个问题是致命的影响。
select *from dual
? ? ? ? ? ? ? *
?ERROR at line 1:
?ORA-01775: looping chain of synonyms
--如果没有尝试重启数据库的情况下,完全可以采用如下的方式来解决,我们可以完全重建表dual,插入dummy的数据
SQL> CREATE TABLE "SYS"."DUAL"?
? ? ? ? ? ? (? ? ? "DUMMY" VARCHAR2(1)
? ? ? ? ? ? ) TABLESPACE "SYSTEM" ;
?Table created.
SQL> GRANT SELECT ON "SYS"."DUAL" TO PUBLIC WITH GRANT OPTION;
?Grant succeeded.
SQL> select *from dual;
?no rows selected
SQL> insert into dual values('X');
?1 row created.
SQL> commit;
?Commit complete.
SQL> select *from dual; --简单的验证,会发现问题似乎解决了。
D
?-
?X
SQL> select sysdate from dual;? --尝试使用dual来查询时间,也没有发现问题。
SYSDATE
?------------------
?20-NOV-14
这个时候可以查看相关的sys下的失效对象,会发现受到影响的还不少,这个时候可以重新编译。
SQL> select object_name,owner ,object_type from dba_objects where status='INVALID'
?OBJECT_NAME? ? ? ? ? ? ? ? ? ? OWNER? ? ? ? ? ? ? ? ? ? ? ? ? OBJECT_TYPE
?------------------------------ ------------------------------ -------------------
?AQ$_ALERT_QT_V? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?ALERT_QUE_R? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?ALERT_QUE_N? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?DBMS_RCVMAN? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?DBMS_BACKUP_RESTORE? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?DBMS_CDC_UTILITY? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?DBMS_CDC_ISUBSCRIBE? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?AQ$_AQ$_MEM_MC_V? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?AQ$_AQ_PROP_TABLE_V? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?AQ_PROP_NOTIFY_R? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?AQ_PROP_NOTIFY_N? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
OBJECT_NAME? ? ? ? ? ? ? ? ? ? OWNER? ? ? ? ? ? ? ? ? ? ? ? ? OBJECT_TYPE
?------------------------------ ------------------------------ -------------------
?ALERT_QUE$1? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?ALERT_QUE$1? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE
?AQ$_KUPC$DATAPUMP_QUETAB_V? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?DBMS_AW_EXP? ? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?DBMS_AW_STATS? ? ? ? ? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?STREAMS$_eva lUATION_CONTEXT? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?AQ$_SYS$SERVICE_METRICS_TAB_V? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? eva lUATION CONTEXT
?SYS$SERVICE_METRICS_R? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?SYS$SERVICE_METRICS_N? ? ? ? ? SYS? ? ? ? ? ? ? ? ? ? ? ? ? ? RULE SET
?MGMT_RESPONSE? ? ? ? ? ? ? ? ? DBSNMP? ? ? ? ? ? ? ? ? ? ? ? PACKAGE BODY
?DBMS_JDM_INTERNAL? ? ? ? ?