Drop dual

有网友删除dual表出现了问题:

删除dual表的时候hang住,然后直接shutdown abort。再重新启动数据库的时候,发现open的时候一直hang住,但是打开另外一个窗口数据库确实已经打开的。

下面进行模拟:

[email protected]>drop table dual;

一直hang在这不动

在另外一个窗口:

[email protected]>shutdown abort
ORACLE instance shut down.

重启数据库:

[email protected]>startup mount
ORACLE instance started.
Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           83886080 bytes
Redo Buffers                4288512 bytes
Database mounted.
[email protected]>alter database open;

一直hang这个不动,打开另外一个窗口:

[email protected]>select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE

[email protected]>

发现数据库已经打开

这是因为系统触发器造成,在初始化参数中加入:

_system_trig_enabled=flase

再次启动数据库:

[email protected]>startup mount
ORACLE instance started.
Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           83886080 bytes
Redo Buffers                4288512 bytes
Database mounted.
[email protected]>show parameter _sys
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
_system_trig_enabled                 boolean                FALSE
audit_sys_operations                 boolean                FALSE
audit_syslog_level                   string
filesystemio_options                 string                 none
ldap_directory_sysauth               string                 no
[email protected]>alter database open;

Database altered.

最开始删除dual表的时候也是因为系统触发器的存在。

现在我们禁用了系统触发器将dual删除看是什么效果:

[email protected]>drop table dual;

Table dropped.

重启数据库:

[email protected]>startup nomount pfile=initorcl11g.ora
ORACLE instance started.
Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           83886080 bytes
Redo Buffers                4288512 bytes
[email protected]>show parameter rep
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
replication_dependency_tracking      boolean                TRUE
[email protected]>
[email protected]>
[email protected]>
[email protected]>
[email protected]>alter database mount;

Database altered.

[email protected]>alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01775: looping chain of synonyms
Process ID: 2485
Session ID: 1 Serial number: 3

这里我们不用trace就知道是因为dual表的缘故,所以dual也是很重要的。不要乱玩

这时候我们需要将REPLICATION_DEPENDENCY_TRACKING参数设置为False才能打开数据库:

官方文档给出的解释:

REPLICATION_DEPENDENCY_TRACKING enables or disables dependency tracking for

read/write operations to the database. Dependency tracking is essential for

propagating changes in a replicated environment in parallel

加入参数打开数据库:

[email protected]>startup mount
ORACLE instance started.
Total System Global Area  417546240 bytes
Fixed Size                  2213936 bytes
Variable Size             327157712 bytes
Database Buffers           83886080 bytes
Redo Buffers                4288512 bytes
Database mounted.
[email protected]>show parameter rep
NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
replication_dependency_tracking      boolean                FALSE
[email protected]>ak^H
SP2-0042: unknown command "a" - rest of line ignored.
[email protected]>a;ter^H
[email protected]>alter database open;

Database altered.

[email protected]>select * from dual;
select * from dual
              *
ERROR at line 1:
ORA-01775: looping chain of synonyms

这时候我们呢需要重建dual表:

[email protected]>CREATE TABLE "SYS"."DUAL"
  2       (  "DUMMY" VARCHAR2(1)
  3       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  4     NOCOMPRESS LOGGING
  5      STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  6      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  7      BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  8      TABLESPACE "SYSTEM" ;

Table created.

[email protected]>[email protected]>GRANT SELECT ON "SYS"."DUAL" TO PUBLIC WITH GRANT OPTION;

Grant succeeded.

[email protected]>[email protected]>@?/rdbms/admin/utlrp.sql

至此我们dual已经恢复完成

[email protected]>select 'www.zbdba.com' from dual;
'WWW.ZBDBA.COM'
--------------------------
www.zbdba.com
时间: 2024-10-10 02:10:56

Drop dual的相关文章

oralce中的dual详解 转 http://blog.sina.com.cn/s/blog_a5a24bcb0100zeay.html

dual是属于sys的只有一个X varchar2(1)列查询虚拟列不会产生逻辑IO=======================================================================DUAL表的用途Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中 --查看当前连接用户SQL> select user from dual;USER--------SYSTEM--查看当前日期.时间sql> sele

在mysql语句中为什么要加反引号

在MySQL语句中我们有时候经常会遇到反引号(``),刚开始的时候不知道什么意思,他是什么作用呢? Select * from `member` order by posts desc limit 0,10; 它是为了区分MYSQL的保留字与普通字符而引入的符号. 举个例子:SELECT `select` FROM `test` WHERE select='字段值' 在test表中,有个select字段,如果不用反引号,MYSQL将把select视为保留字而导致出错,所以,有MYSQL保留字作为

[转]MySQL保留关键字(SQL Error: 1064, SQLState: 42000错误)

在MySQL 中,下表中的字显式被保留.其中大多数字进制被标准SQL 用作列名和/ 或表名( 例如,GROUP ) .少数被保留了,因为MySQL 需要它们,( 目前) 使用yacc 解析程序.保留字 被引起来后可以用作识别符. 你不小心使用了下面的关键字  那么就会报这个错误 “SQL Error: 1064, SQLState: 42000错误” ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY

mysql不能写入数据之关键字冲突

问题描述:今天使用mysql新建了一个表.在插入数据时,报了语法错误.由于使用的是 mabits 代码自动生成工具,并且自己没有改写其中的sql语句.所以确信,sql语句部分应该没有可能写错.因此马上意识到可能表里面的字段出了问题.于是查看表里面的字段,发现有一个desc 字段和mysql中降序的关键字冲突了.然后顺手把这个字段改写成了describe.到这里,以为问题就应该解决了.谁料想,又冲突了.describe也是mysql的关键字.于是上网搜了一下mysql 关键字表. 如下是mysql

Mysql关键字

ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONNECTION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTA

Mysql 关键字-保留字

ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONNECTION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTA

mysql5.5手册读书日记(1)

<?php //mysql语句使用技巧 /* * 我的数据库是5.5.2 * * 查询当前用户的登陆的名字 * select user(); * * 查询当前mysql服务器时间和服务器版本 * select version(),current_time; * * * 修改一个字段的属性 * * * 查看mysql数据库的user表,查看授权用户 * use user; * select host,user,password from user; * * 在shell 或者dos下登陆mysql

MySQL关键字(保留字)列表

在使用MySQL的时候,一般尽量避免用关键字作为表名,如使用关键字做表名,需要按标准写法给SQL语句加[](或是“)区分字段名和表名. 下面列出MySQL所有关键字,希望给使用MySQL的朋友提供一些参考帮助. ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLU

Online Judge(OJ)搭建——4、具体实现

代码编译.运行.保存: 本系统目前支持 Java.C++ 的编译.如有其他语言需要编译,扩展也很简单,因为这里使用了一个抽象类LanguageTest,处理好代码运行编译之前的文件保存,代码运行之中的测试用例读取,代码运行编译之后的数据保存.主要利用了面向对象的多态性. package per.piers.onlineJudge.service; import org.springframework.stereotype.Service; import per.piers.onlineJudge