今天在学习RMAN恢复数据库时,恢复后的数据库查询表出现乱码:
1:完全备份数据库
MAN>backup database format 'd:\orabackup\%u.bak';
启动 backup 于 13-5月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=9 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
输入数据文件 fno=00001 name=D:\ORACLE\ORADATA\GARNETT\SYSTEM01.DBF
输入数据文件 fno=00002 name=D:\ORACLE\ORADATA\GARNETT\UNDOTBS01.DB
输入数据文件 fno=00005 name=D:\ORACLE\ORADATA\GARNETT\EXAMPLE01.DB
输入数据文件 fno=00009 name=D:\ORACLE\ORADATA\GARNETT\TEST01.DBF
输入数据文件 fno=00006 name=D:\ORACLE\ORADATA\GARNETT\INDX01.DBF
输入数据文件 fno=00008 name=D:\ORACLE\ORADATA\GARNETT\USERS01.DBF
输入数据文件 fno=00003 name=D:\ORACLE\ORADATA\GARNETT\CWMLITE01.DB
输入数据文件 fno=00004 name=D:\ORACLE\ORADATA\GARNETT\DRSYS01.DBF
输入数据文件 fno=00007 name=D:\ORACLE\ORADATA\GARNETT\TOOLS01.DBF
输入数据文件 fno=00010 name=D:\ORACLE\ORADATA\GARNETT\TEST02.DBF
通道 ORA_DISK_1: 正在启动段 1 于 13-5月 -07
通道 ORA_DISK_1: 已完成段 1 于 13-5月 -07
段 handle=D:\ORABACKUP\0DIHKHVG.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:56
完成 backup 于 13-5月 -07
模拟故障 删除数据文件 TEST01.DBF和TEST02.DBF
2:恢复数据库
RMAN>restore database;
启动 restore 于 13-5月 -07
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=9 devtype=DISK
正在略过数据文件 1; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\SYSTEM01.DBF
正在略过数据文件 2; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\UNDOTBS01.DBF
正在略过数据文件 3; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\CWMLITE01.DBF
正在略过数据文件 4; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\DRSYS01.DBF
正在略过数据文件 5; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\EXAMPLE01.DBF
正在略过数据文件 6; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\INDX01.DBF
正在略过数据文件 7; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\TOOLS01.DBF
正在略过数据文件 8; 已恢复到文件 D:\ORACLE\ORADATA\GARNETT\USERS01.DBF
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00009恢复到D:\ORACLE\ORADATA\GARNETT\TEST01.DBF
正将数据文件00010恢复到D:\ORACLE\ORADATA\GARNETT\TEST02.DBF
通道 ORA_DISK_1: 已恢复备份段 1
段 handle=D:\ORABACKUP\0DIHKHVG.BAK tag=null params=NULL
通道 ORA_DISK_1: 恢复完成
完成 restore 于 13-5月 -07
3:问题出现
查询表student(student表建在表空间TEST下)
SQL>select * from student;
SNO SNAME SAGE SS SDEPT
---------- --------- ---------- -- --------------------
2004110428 AuG`_S 23 DP
2004110429 RODMAN_S 22 DP
2004010430 GARNETT_S 19 DP NDQ'T:
2004110431 BmIY;*_S 20 DP
2004110432 Ko:@=\_S 21 DP
2004020433 Lily_S 18 E. Mb9zSoQ'T:
2004110425 @nUq?5_S 23 DP
2004110426 @nNDI}_S 22 DP
2004110427 @nVG3,_S 21 DP
2004110434 Mu=(8U_S 22 DP
2004110435 AuKI_S 21 DP
SNO SNAME SAGE SS SDEPT
---------- --------- ---------- -- --------------------
2004110436 HNSB_S 22 DP
2004110437 KN3/_S 21 DP
2004110438 76OM@<_s e.>
2004110439 76Q)=?_S 21 E. IzC|?FQ'Q'T:
2004110440 Vla0_S 21 E.
4:解决问题
修改配置文件
对于Oracle Enterprise Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
对于Windows操作系统,还需要修改一项,在文件中找到# SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为 SQLPLUS_SYSTEMROOT=d:\\WINNT。
5:再次查询表时
SQL>select * from student;
SNO SNAME SAGE SS SDEPT
---------- --------- ---------- -- --------------------
2004110428 刘青_S 23 男 计算机科学学院
2004110429 RODMAN_S 22 男 计算机科学学院
2004010430 GARNETT_S 19 男 文学院
2004110431 马少华_S 20 男 计算机科学学院
2004110432 孙豪杰_S 21 男 计算机科学学院
2004020433 Lily_S 18 女 外国语学院
2004110425 李振康_S 23 男 计算机科学学院
2004110426 李文升_S 22 男 计算机科学学院
2004110427 李智超_S 21 男 计算机科学学院
2004110434 王建刚_S 22 男 计算机科学学院
2004110435 刘松_S 21 男 计算机科学学院
SNO SNAME SAGE SS SDEPT
---------- --------- ---------- -- --------------------
2004110436 任勇_S 22 男 计算机科学学院
2004110437 宋朝_S 21 男 计算机科学学院
2004110438 范贤兰_S 20 女 计算机科学学院
2004110439 范雪娇_S 21 女 生命科学学院
2004110440 朱岚_S 21 女 计算机科学学院
对比两次查询结果,数据和英文在查询后都没出现错误,只有中文字符出现问题。最后经过修改,字符集乱码问题得到解决,显示正确的简体中文字符集。