关于dual表的破坏性测试(r3笔记第60天)
时间:2022-05-04
本文章向大家介绍关于dual表的破坏性测试(r3笔记第60天),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
关于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 EVALUATION 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 EVALUATION CONTEXT
AQ$_AQ_PROP_TABLE_V SYS EVALUATION 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 EVALUATION CONTEXT
DBMS_AW_EXP SYS PACKAGE BODY
DBMS_AW_STATS SYS PACKAGE BODY
STREAMS$_EVALUATION_CONTEXT SYS EVALUATION CONTEXT
AQ$_SYS$SERVICE_METRICS_TAB_V SYS EVALUATION CONTEXT
SYS$SERVICE_METRICS_R SYS RULE SET
SYS$SERVICE_METRICS_N SYS RULE SET
MGMT_RESPONSE DBSNMP PACKAGE BODY
DBMS_JDM_INTERNAL SYS PACKAGE BODY
OBJECT_NAME OWNER OBJECT_TYPE
------------------------------ ------------------------------ -------------------
AQ$_KUPC$DATAPUMP_QUETAB_1_V SYS EVALUATION CONTEXT
SQL>@?/rdbms/admin/utlrp.sql
如果不幸的是我们在出现问题的时候尝试重启数据库,就会发现数据库就起不来了。
SQL> drop table dual;
Table dropped.
SQL> select sysdate from dual;
select sysdate from dual
*
ERROR at line 1:
ORA-01775: looping chain of synonyms
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2227944 bytes
Variable Size 255852824 bytes
Database Buffers 50331648 bytes
Redo Buffers 4747264 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01775: looping chain of synonyms
Process ID: 434
Session ID: 237 Serial number: 5
alert日志中的相关内容如下:
Undo initialization finished serial:0 start:236214754 end:236215144 diff:390 (3 seconds)
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is AL32UTF8
No Resource Manager plan active
Errors in file /u03/ora11g/diag/rdbms/test01/TEST01/trace/TEST01_ora_434.trc:
ORA-01775: looping chain of synonyms
Errors in file /u03/ora11g/diag/rdbms/test01/TEST01/trace/TEST01_ora_434.trc:
ORA-01775: looping chain of synonyms
Error 1775 happened during db open, shutting down database
USER (ospid: 434): terminating the instance due to error 1775
Instance terminated by USER, pid = 434
ORA-1092 signalled during: ALTER DATABASE OPEN...
opiodr aborting process unknown ospid (434) as a result of ORA-1092
Thu Nov 20 06:31:13 2014
ORA-1092 : opitsk aborting process
Thu Nov 20 06:32:02 2014
日志中提到的trace 文件的内容如下:
*** 2014-11-20 06:31:11.920
*** SESSION ID:(237.5) 2014-11-20 06:31:11.920
*** CLIENT ID:() 2014-11-20 06:31:11.920
*** SERVICE NAME:(SYS$USERS) 2014-11-20 06:31:11.920
*** MODULE NAME:(sqlplus@rac1 (TNS V1-V3)) 2014-11-20 06:31:11.920
*** ACTION NAME:() 2014-11-20 06:31:11.920
ORA-01775: looping chain of synonyms
ORA-01775: looping chain of synonyms
*** 2014-11-20 06:31:11.947
USER (ospid: 434): terminating the instance due to error 1775
如果确实知道问题的原因就轻车熟路的解决了,要不还需要费一番周折,开启一些更为详尽的trace来排查。 这个错误和数据库参数replication_dependency_tracking有关,默认是TRUE,我们需要暂时绕过这个校验,先把库启动起来,然后重建表dual就可以了。在修复以后,重启数据库恢复replication_dependency_tracking的默认值TRUE
SQL> show parameter track
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_unrecoverable_scn_tracking boolean
TRUE
replication_dependency_tracking boolean
TRUE
SQL> alter system set replication_dependency_tracking=false;
alter system set replication_dependency_tracking=false
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SQL> alter system set replication_dependency_tracking=false scope=spfile;
System altered.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2227944 bytes
Variable Size 255852824 bytes
Database Buffers 50331648 bytes
Redo Buffers 4747264 bytes
Database mounted.
Database opened.
SQL>
SQL> select sysdate from dual; --启动起来之后尝试,会发现问题没有修复,我们需要重建表dual
select sysdate from dual
*
ERROR at line 1:
ORA-01775: looping chain of synonyms
SQL> CREATE TABLE "SYS"."DUAL"
2 ( "DUMMY" VARCHAR2(1)
3 ) TABLESPACE "SYSTEM" ;
Table created.
SQL> GRANT SELECT ON "SYS"."DUAL" TO PUBLIC WITH GRANT OPTION;
Grant succeeded.
SQL> insert into dual values('X');
1 row created.
SQL> commit;
Commit complete.
SQL> select sysdate from dual; --修复以后问题似乎就解决了。
SYSDATE
------------------
20-NOV-14
SQL> show parameter track
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unrecoverable_scn_tracking boolean TRUE
replication_dependency_tracking boolean FALSE
SQL> alter system set replication_dependency_tracking=TRUE scope=spfile;
System altered.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2227944 bytes
Variable Size 255852824 bytes
Database Buffers 50331648 bytes
Redo Buffers 4747264 bytes
Database mounted.
Database opened.
SQL> select sysdate from dual;
SYSDATE
------------------
20-NOV-14
然后可以重新编译失效对象,这个问题的解决就告一段落了。
- 线段树入门总结
- 从零基础学三分查找
- Codeforces Beta Round #1 A,B,C
- 线性分类器-中篇
- isupper()函数
- HDU 5882 Balanced Game
- 超级玛丽游戏
- POJ 3673 Cow Multiplication
- HDU 5144 NPY and shot(物理运动学+三分查找)
- 深度|Python股票数据分析
- HDU 2438 Turn the corner(三分查找)
- UVAlive 3708 Graveyard(最优化问题)
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
- Selenium2+python自动化19-单选和复选框
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Vulnhub】Play XML Entities
- 一切皆是映射:詳解 Kotlin Map 集合類
- 10大高性能开发宝石,我要消灭一半程序员!
- 面试官:你说你会RabbitMQ,那聊聊它的交换机(Exchange)吧
- Kubeadm 1.9 HA 高可用集群本地离线镜像部署【已验证】
- kubernetes(k8s)集群安装calico
- kubernetes(k8s) Prometheus+grafana监控告警安装部署
- 基于OpencvCV的情绪检测
- 设计模式 之 抽象工厂模式
- Angular应用里HTTP请求的错误处理
- 使用npm安装TypeScript
- TypeScript的interface关键字
- TypeScript的class关键字
- TypeScript里一些特殊的类型
- TypeScript的类型断言,有点像ABAP的强制类型转换