字符集导致的备份失败

现象描述

用RMAN对oracle数据库实例orcl进行备份,失败,RMAN日志显示错误如下

ORA-27040: 文件创建错误, 无法创建文件
OSD-04002: ???????
O/S-Error: (OS 3) ?????????????????

问题分析

错误一堆乱码,首先想到的就是字符集。搜罗一下错误号,基本能肯定错误的信息


看了一下备份保存路径,包含了中文。修改了一下保存路径(英文+数字),备份成功。百分百确定是字符集的问题了。

那么到底用什么字符集才能使用中文呢?

用 select * from sys.nls_database_parameters看了一下当前字符集,恰好本机还有一个实例(RMAN备份,路径包含中文,并且成功)进行了对比
支持中文的字符集ZHS16GBK

不支持中文的字符集 US7ASCII(这个也是默认安装使用的字符集)。后来查资料得知,此字符集虽然支持中文编码,但是是使用了单字节编码。如果采用单字节的字符集来存储中文信息,数据库的字符集虽然是US7ASCII编码,但里面存储的数据编码实际上却是另外的编码格式,这种不一致的情况很容易引起问题。

具体处理

到这里思路就很明确了,修改字符集为ZHS16GBK。
具体操作步骤如下:
sqlplus "/ as sysdba"
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP MOUNT
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> ALTER DATABASE OPEN
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL> SHUTDOWN IMMEDIATE
SQL> STARTUP

之后查询字符集,确认修改成功。再次进行备份,一切都很正常。

总结

在实验环境中,多做一些对比试验,总能找出原因;在客户环境中,就需要根据日志,大胆猜测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值