http://space.itpub.net/13316/viewspace-468368
国庆后,因停电工作站崩溃, oracle 要恢复了。
在恢复完windows 系统后, 安装oracle8i, 然后就是db recovery。恢复很顺利,可原来table中的中文全乱码。 开始还怀疑在重建control file时字符集选错了或者重建的脚步有问题。
set ORACLE_SID=iga
D:/oracle/ora817/bin/oradim -new -sid IGA -startmode manual -pfile "f:/orabackup/backup/initiga.ora"
startup nomount pfile="f:/orabackup/backup/initiga.ora"
CREATE CONTROLFILE REUSE DATABASE "IGA" NORESETLOGS ARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 500
MAXINSTANCES 1
MAXLOGHISTORY 1815
LOGFILE
GROUP 4 'E:/ORACLE/ORADATA/IGA/REDO04.LOG' SIZE 1M,
GROUP 5 'E:/ORACLE/ORADATA/IGA/REDO05.LOG' SIZE 1M,
GROUP 6 'E:/ORACLE/ORADATA/IGA/REDO06.LOG' SIZE 1M
DATAFILE
'E:/oracle/oradata/iga/SYSTEM01.DBF',
'E:/oracle/oradata/iga/RBS01.DBF',
'E:/oracle/oradata/iga/USERS01.DBF',
'E:/ORACLE/ORADATA/IGA/TEMP01.DBF',
'E:/ORACLE/ORADATA/IGA/TOOLS01.DBF',
'E:/ORACLE/ORADATA/IGA/IGA_INDX01.DBF',
'E:/ORACLE/ORADATA/IGA/DR01.DBF',
'E:/ORACLE/ORADATA/IGA/IGA_DATA01.DBF'
CHARACTER SET US7ASCII
;
ALTER DATABASE OPEN ;
查来查去, 脚本没有任何问题; 郁闷呀
耗了2个小时, 中间抽根烟; 灵感来了。
改了注册表:
HKEY_LOCAL_MACHIN / SOFTWARE / ORACLE/ HOME0的
NLS_LANG是: AMERICAN_AMERICA.WE8ISO8859P1
改成: AMERICAN_AMERICA.US7ASCII
重启机器, 问题解决了
总结:
我之所以感觉这个帖子很好,是因为这个帖子很具有典型性:你查询出来,看到的乱码,未在数据库中存放的就是乱码。
因为经过了客户端NLS_LANG的转换。