PLS-00553: 无法识别字符集名称

在升级用户系统时遇到PLS-00533错误,随查资料发现同事jxc的BLOG上有介绍;原文如下:

 PLS-00553: 无法识别字符集名称

偶然遇到PLS-00553: 无法识别字符集名称, 关于这个问题的解决方案大都是修改数据库字符集,但是该数据库字符集没有发现明显问题,如何处理?

这个错误是发生在创建触发器时, 当触发器带 :new或者 :old关键字时报错, 如果不带就没问题. 而且该表上以前建立的触发器是好的, 但是重新编译时也会报同样的错误.

经过多次努力发现,在相同的用户/表空间下建立的表上建立的触发器是可以的最终判定为该表状态有问题.

最终的解决方案是, 备份该表上的触发器语法, 备份表数据, 重建表, 恢复数据, 恢复触发器, 编译失效对象.

 

摘自 季小川 的博客(http://blog.csdn.net/jxc/archive/2006/12/06/1432009.aspx)

 因为和jxc处理的是同一个系统的同一张表,问题现象当然也完全一样;

于是首先根据jxc的方法实验之:

· 备份Trigger

· 备份表数据,利用rename实现

· 重建表,利用create as 根据备份表重新建立

· 恢复触发器,发现触发器仍然出现PLS-00553的错误

和jxc进行交流后,jxc和我的步骤相同,但当时却是成功的;随稍微改变处理方式:

· 备份Trigger

· 备份表数据,利用rename实现

· 重建表,将原表语法导出,利用SQL语句重新建立表

· 恢复触发器,成功,将Trigger全部disable

· 恢复数据

· 将trigger enable

问题得到解决;

大约过了一周,客户又提出新的需求,仍然需要进行trigger的修改,感觉非常恐怖,心想可能还要重复一周前的工作;

不料,在修改完trigger后,在生产库中直接建立(利用PLSQLDEV 的command窗口),竟然出乎意料的发现创建Trigger

成功.

重新分析原因,上次jxc是也是通过create as 建立的表,而上次我自己最后是通过sql 语句建立的表,然后用insert 插入

只有这么点区别;所以重新分析原因,因为create as 是通过数据库的copy的方式进行,所以速度非常快;而insert into 是

逻辑上面的数据插入,所以认为产生pls-00553的错误不仅和表状态相关,还与数据块的物理结构有关,重新组织数据后

问题解决.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值