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的轉換。