网站首页 > 技术文章 正文
概述
今天主要分享之前在学Oracle时做的一个实验,删除dual表并恢复。
dual表是系统的一个虚表,用来构成select的语法规则。
如果不小心删除了的话,会导致数据库起不来,报错ORA-01092: ORACLE instance terminated. Disconnection forced。
下面介绍一下实验的过程。
环境:
数据库版本11.2.0.3
OS:linux redhat6.4
删除dual表重启
[oracle@Oracle11g ~]$ sqlplus / as sysdba SQL> select * from dual; D - X
--删除DUAL表
SQL> drop table dual;
--报错,已无法启动
Alert日志报错:
[oracle@Oracle11g ~]$ tail -50f /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
解决思路:
1.创建一个pfile,在pfile中加入参数replication_dependency_tracking = FALSE 。
2.使用这个加参数的pfile启动数据库。
3.创建dual表。
4.去掉参数,用pfile重启或者直接默认spfile重启。
即可顺利完成。
创建pfile,修改参数
[oracle@Oracle11g ~]$ sqlplus / as sysdba; SQL> startup mount (只能用startup mount启动,startup nomount会报错) SQL> create pfile='/tmp/pfile' from spfile; SQL> shutdown immediate
在/tmp/pfile文件中最后加入参数:replication_dependency_tracking = FALSE
[oracle@Oracle11g dbs]$ cat /tmp/pfile orcl.__db_cache_size=704643072 orcl.__java_pool_size=16777216 orcl.__large_pool_size=16777216 orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment orcl.__pga_aggregate_target=687865856 orcl.__sga_target=1023410176 orcl.__shared_io_pool_size=0 orcl.__shared_pool_size=268435456 orcl.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/orcl/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' *.memory_target=1697644544 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_retention=900 *.undo_tablespace='UNDOTBS1' replication_dependency_tracking=FALSE
这个参数指定数据库在启动的时候是否启用读/写相关性跟踪。
通过pfile重启数据库
[oracle@Oracle11g ~]$ sqlplus / as sysdba SQL> startup pfile='/tmp/pfile'
--顺利启动,查看dual
SQL> select * from sys.dual;
创建dual表
官网:
'Dual' Synonym was Dropped by Mistake and Cannot Recreate it [ID 973260.1]
其中一段:
It appears a trigger is being fired prior to the create statement. Solution ====================== -- To implement the solution, please execute the following steps:: It appears a before create trigger is firing before issuing the create synonym statement. 1- Issue: SQL>ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=FALSE SCOPE=MEMORY; SQL> create or replace public synonym dual for sys.dual; SQL>ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=true SCOPE=MEMORY; 2- If that still fails, query dba_triggers to determine if you have a before create trigger enabled. If yes, disable it and then re-issue create synonym statement. 创建dual表是系统触发器的问题 SQL> ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=FALSE SCOPE=MEMORY; System altered. SQL> create table SYS.DUAL ( dummy VARCHAR2(1)) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initi al 16K next 1M minextents 1 maxextents unlimited); Table created.
--创建成功dual表
SQL> select * from dual; SQL> insert into dual values('X'); SQL> commit; SQL> grant select on DUAL to PUBLIC with grant option; SQL> ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=true SCOPE=MEMORY; SQL> select * from dual; D - X SQL> select owner,object_name,object_type from dba_objects where object_name='DUAL'; OWNER OBJECT_NAME OBJECT_TYPE ---------- ------------------------------ ------------------- SYS DUAL TABLE PUBLIC DUAL SYNONYM
重启数据库
关闭数据库重启即可。
SQL> shutdown immediate; SQL> startup (通过spfile启动) SQL> select * from dual; D - X
大家有空也可以做一下,这个也是朋友一次问到dual表删除后能不能恢复,然后去做的一个实验。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
猜你喜欢
- 2024-09-23 (二)SQL数据模式、表、索引的建立与删除
- 2024-09-23 当我们输入一条SQL查询语句时,发生了什么?
- 2024-09-23 超详细!SQL语法速成就靠这篇了!(下)
- 2024-09-23 sql语句(sql语句增删改查)
- 2024-09-23 数据库触发器(数据库触发器的创建和使用)
- 2024-09-23 SQL创建触发器(sql创建触发器禁止修改成绩)
- 2024-09-23 MySQL_08_触发器(mysql触发器的使用及语法)
- 2024-09-23 被低估的SQL(被低估的中国半导体龙头)
- 2024-09-23 都2021年了不会还有人不会用SQL吧
- 2024-09-23 Navicat工具中“清空表”与“截断表”区别,望文生义惹的祸
- 1514℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 573℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 513℃MySQL service启动脚本浅析(r12笔记第59天)
- 486℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 486℃启用MySQL查询缓存(mysql8.0查询缓存)
- 469℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 449℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 447℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (83)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)