### PLSQL显示乱码、导出问题的解决方法
#### 一、ORACLE数据库显示乱码的问题
在处理Oracle数据库时,经常会遇到显示乱码的情况,尤其是在使用PL/SQL Developer等客户端工具时更为常见。此类问题通常是由于字符集设置不一致造成的。
##### 错误脚本示例及分析
原始脚本中的错误主要在于使用了不正确的注释符号以及不正确的字符集设置:
```plaintext
@echooff
set path=D:\instantclient_10_2#instantclient_10_2目录
set ORACLE_HOME=D:\instantclient_10_2#instantclient_10_2目录
set TNS_ADMIN=D:\instantclient_10_2#instantclient_10_2目录
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK#字符集
start plsqldev.exe
```
**错误点解析**:
- `#` 符号并不是DOS批处理文件中的注释符号。在批处理文件中,如果想要添加注释,通常的做法是将需要注释的行或部分放置在`REM`或`::`之后。
- 字符集设置中,`AMERICAN_AMERICA.ZHS16GBK` 是指定了美国地区,使用ZHS16GBK字符集,这可能与实际环境中的语言和地区设置不匹配,导致中文显示为乱码。
**解决方案**:
1. **修正注释符号**:将脚本中的 `#` 替换为 `REM` 或 `::`。
2. **确认字符集设置**:确保 `NLS_LANG` 设置的字符集与数据库服务器端以及客户端其他设置保持一致。例如,如果服务器端使用的是 `SIMPLIFIED CHINESE_CHINA.ZHS16GBK`,则客户端也需要设置为相同的字符集。
**修改后的脚本**:
```plaintext
@echooff
set path=D:\instantclient_10_2 :: instantclient_10_2目录
set ORACLE_HOME=D:\instantclient_10_2 :: instantclient_10_2目录
set TNS_ADMIN=D:\instantclient_10_2 :: instantclient_10_2目录
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK :: 字符集
start plsqldev.exe
```
#### 二、ORACLE数据库导入的问题
在进行Oracle数据库数据导入操作时,可能会遇到一些常见的错误,比如导入过程中的性能问题或者特定选项配置不当等问题。
##### 导入时出现错误示例
在服务器172.16.0.12上执行导入命令时,出现错误提示,经过排查发现是导入了统计信息导致的问题。
**示例命令**:
```plaintext
imp system/jinhetech@orcl file=d:/name.dmp fromuser=test touser=test statistics=none
```
**命令解释**:
- `system/jinhetech@orcl`:登录用户名/密码@服务名
- `file=d:/name.dmp`:指定要导入的文件路径
- `fromuser=test`:表示导出时的用户
- `touser=test`:表示导入时的用户
- `statistics=none`:表示不导入统计信息。这是因为如果表很大,导入统计信息会花费很长的时间,因此选择不导入统计信息以加快导入速度。
**正确导出方式**:
```plaintext
exp test/test@orcl file=E:\test.dmp full=y
```
该命令表示导出test用户下的所有数据。
**导出注意事项**:
- 导出的是当前用户的的数据。
- 如果当前用户有DBA的权限,则导出所有数据!
**正确导入方式**:
```plaintext
imp test/test@orcl file=d:/test.dmp fromuser=test touser=test statistics=none ignore=y
```
该命令表示导入test用户数据,且不导入统计信息,并忽略创建错误继续导入。
**命令解释补充**:
- `ignore=y`:表示忽略创建错误,继续后面的操作。
- `statistics=none`:表示不导入统计信息。导入后,统计信息会被锁住,无法更新统计信息,可以使用包 `dbms_stats.unlock_schema_stats` 来解锁。
通过以上步骤,可以有效地解决PL/SQL Developer中出现的乱码问题以及在导入导出过程中遇到的相关问题。