修改props$中字符集的恢复

在9i和10g还有11g的数据库中,如果我们update了props$数据字典中的多个字符集的值,造成数据库无法启动,除了用bbed modify数据块外,oracle还自带了一个工具lbuilder,可以用来恢复。

下面介绍下这个工具的使用。

数据库版本和原来的字符集:

下面我们将字符集update成错误的字符集:

重启数据库的时候,我们发现数据库已经启动不了了:

在alertlog中可以看到关于字符集的报错:ORA-12701: CREATE DATABASE character set is not known

此时数据库已经无法open,只能到mount状态。因此无法在用update的方式更新回正确的数据。怎么办?

oracle提供了一个lbuilder(locale builder)可以用来修改字符集,启动数据库。从而再次update回正确的props$表。lbuilder和oracle的安装类似,需要有xwindows环境运行。

lbuilder的启动界面:

主界面:

我们选择file-open-by object name

选择原来能正确启动的字符集:

注:原来正确能启动的字符集,我们可以中alertlog中观察到:

把这个字符集的名字改成update之前错误update成的名字:

update成错误的字符集,我们在alertlog中也能看到:

把WE8ISO8859P1改成zhs6gbk:

改完后选择Generate NLB:

选择$ORACLE_HOME/ocommon/nls/data:

点击OK:

最后点击右边的保存图标保存:

重新启动数据库:

记得将props$表的字符集update回去:

最后在唠叨一句:没啥把握,在没有oracle官方确认的情况下,千万别在生产系统上随便update任何字典表!

相关文章

2条评论

  1. oracle10.2 update了props$数据字典中的多个字符集的值,造成数据库无法启动。按照这个方法。
    改完后选择Generate NLB:

    选择$ORACLE_HOME/ocommon/nls/data: 我的目录是/u01/app/oracle/product/10.2.0/db_1/nls/data 点击保存后报错:说 cannot save based on unicode definition.

回复 runnerup 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据