字典禁忌:UPDATE GLOBAL_NAME为空之后的恢复

编辑手记:最近一个朋友遭遇到了这个问题,当GLOBAL_NAME被更新为空值之后,数据库无法启动,我们重温一下老熊的这个测试,记住结论,无论如何不要Update字典表

如果你在数据库的告警日志中发现类似如下的提示,那么多半你的PROPS$发生了更改:

Database Characterset is ZHS16GBK Updating 7.0.0.0.0 NLS parameters in sys.props$ -- adding 10.2.0.5.0 NLS parameters.

在以前的一篇文章中( 数据库链:Database Link与GLOBAL_NAMES参数的关系 ),我提到千万不能将 Oracle 数据库的 global_name 更新为空。这不,事儿来了。我的一个同事,提到了一个解决办法,不过那个办法实际上是一种不完全恢复的办法,如果没有备份,就行不通。如果没有备份,可以使用BBED来修改块来解决这个问题,不过使用 bbed 仍然比较麻烦。

下面是我一时心血来潮进行的一次测试。测试环境,10.2.0.4 for Linux AS 5.5。注意,不要在生产库上模仿。注意:这个方法可能仅适用于10.2.0.4版本。

首先 UPDATE GLOBAL_NAME 为空,COMMIT 后以 abort 方式关闭数据库,以 abort 方式只是为了增加点难度。之后再启动数据库。

启动失败,不出意料出现 ORA-600[18062] 错误:

下面来解决这个问题。

第1步,重启数据库到 MOUNT 状态:

第2步,在另一个窗口中,使用 gdb

第3步,OPEN 数据库:

约等一会儿,在 alert 日志里面可以看到:

在 gdb 的输出可以看到:

第4步,在 gdb 那里中止 OPEN:

sqlplus 会提示:

这一次,Instance 并没有 terminated。只是 Serverprocess 被 KILL 了。

第5步,还原 GLOBAL_NAME:

虽然可以执行 UPDATE,但是不能 COMMIT。再试试能不能做 DDL:

成功了。

在另会一个会话中查看 GLOBAL_NAME:

GLOBAL_NAME 回来了。

这里通过 DDL 的隐式提交特性来 UPDATE GLOBAL_NAME。其实还有更简单的办法:OCI 主动断开连接时的自动提交。如果 UPDATE 之后,直接退出 sqlplus,UPDATEGLOBAL_NAME 的事务实际也提交了。看起来 ORACLE 这时只是不能执行显式的 COMMIT 语句。

第6步,重启数据库:

看起来只能以 abort 方式关闭数据库:

成功了,数据库起来了。没有数据丢失,没有使用备份。不需要基于时间点的恢复,不需要 BBED,不需要 Resetlog。

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2016-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)

--================================================

7510
来自专栏MongoDB中文社区

MongoDB事务模型分析

在了解写操作的事务性之前,需要先了解mongo层的每一个table,是如何与wiredtiger层的table(btree)对应的。mongo层一个最简单的ta...

32820
来自专栏数据和云

时过境迁:Oracle跨平台迁移之XTTS方案与实践

作者简介 ? 谢金融 云和恩墨东区交付部 Oracle 工程师,多年来从事 Oracle 第三方服务,曾服务过金融、制造业、物流、政府等许多行业的客户,精通数据...

1.4K100
来自专栏数据和云

举一反三:跨平台版本迁移之 XTTS 方案操作指南

作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工作经验,曾任职于大型的国家电信、省级财政、省级公安的维护,性能调优等。精通 Ora...

19130
来自专栏FreeBuf

Hibernate HQL注入攻击入门

作者 Taskiller SQL注入是一种大家非常熟悉的攻击方式,目前网络上有大量存在注入漏洞的DBMS(如MySQL,Oracle,MSSQL等)。但是,我在...

51280
来自专栏散尽浮华

Mysql读写分离方案-MySQL Proxy环境部署记录

Mysql的读写分离可以使用MySQL Proxy和Amoeba实现,其实也可以使用MySQL-MMM实现读写分离的自动切换。MySQL Proxy有一项强大功...

47980
来自专栏java系列博客

pl/sql导入excel到oracle表

24370
来自专栏杨建荣的学习笔记

rman中三个不完全恢复场景(r6笔记第16天)

rman在数据的备份恢复中还是发挥了重大的作用,把冷备,热备这种手工备份方式做了集成化的管理,可以基于这个工具集完成相对复杂额备份恢复工作。 当然了rman相对...

32450
来自专栏杨建荣的学习笔记

记一次数据库的分析和优化建议(r6笔记第24天)

数据库的巡检是DBA工作中的一部分,有时候我们还是希望能够在巡检的基础上发现一些潜在的问题,把尽可能多的问题解决在初始阶段。 今天来给大家举一个数据库巡检和性能...

37880
来自专栏杨建荣的学习笔记

一个闪回区报警的数据恢复(r11笔记第62天)

今天在火车上接到一个电话说,数据库有个报警,让我看看是怎么回事。 看着报警信息一直重复出现,看来是有些问题了。 这是一个统计库,出现了DG相关的...

27650

扫码关注云+社区

领取腾讯云代金券