美文网首页我爱编程
Oracle修改字符集

Oracle修改字符集

作者: 之行Journey | 来源:发表于2018-05-10 19:12 被阅读0次

背景:公司给更换了配置较高的笔记本,所以一切软件又要重新安装了,也是又一次翻着百度安装Oracle,技术不到家也好,保险也罢,我实在是怕错了一步,又要卸载了从头再来,卸载干净Oracle实在是太恶心。在其中的一步,由于我忘记原来备份的数据库是以什么字符集存储的,就手贱的把正在安装的字符集更换成了“UTF8”,而原来的字符集是默认的,so,就有了这篇文章。原谅小白昏头昏脑的这一波操作。


修改服务端数据库字符集

由于我的数据端本身就是在自己的电脑上安装着,所以就不存在什么远程操作了。倘若要修改虚拟机或是其他PC上的数据库字符集,那还是要SSH到远程位置进行操作。

  1. 查询目前数据库所使用的字符集(可直接在plsql中执行以下语句):

select * from V$NLS_PARAMETERS;

其中查询结果中 “NLS_CHARACTERSET” 的值即为目前所使用的,大部分都为“ZHS16GBK”或“AL32UTF8”的其中一种。我的结果如下图(我已经修改回来了):

查询结果.png
原来的值为“AL32UTF8”,我要改成图中的结果。
  1. 修改字符集(将“AL32UTF8”更改为“ZHS16GBK”)
    其实,平常我们执行sql等基本已经熟悉了plsql客户端的方式,但这个修改是要在cmd命令行中进行的。
  • win+R,输入“cmd”进入命令行;
  • 将数据库启动到RESTRICTED模式[1]下做字符集更改:
    • 进入sqlplus
      SQL\> sqlplus/nolog

    • 以管理员身份登录
      SQL\> conn / as sysdba

    • 然后就是关闭数据库,进入限制模式,修改字符集
      SQL\> shutdown immediate;

      数据库已经关闭。
      已经卸载数据库。
      ORACLE 例程已经关闭。

      SQL> startup mount;

      ORACLE 例程已经启动。
      Total System Global Area 6781128704 bytes
      Fixed Size 2188608 bytes
      Variable Size 3523218112 bytes
      Database Buffers 3238002688 bytes
      Redo Buffers 17719296 bytes
      数据库装载完毕。

      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 ZHS16GBK;

      ALTER DATABASE CHARACTER SET ZHS16GBK*
      第 1 行出现错误:
      ORA-12712: 新字符集必须为旧字符集的超集

      此处我们使用“INTERNAL_USE ZHS16GBK”字符集来跳过子集检查。
      SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

      数据库已更改。

  • 现在我们就已经把字符集修改完毕了。重启一下数据库。
    SQL> shutdown immediate;
    SQL> startup;
  • 再次执行查询字符集语句,可看到修改结果。
  1. 修改环境变量。
    我使用的是Windows环境,所以直接添加系统变量。
    变量名称:NLS_LANG;
    变量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK(你修改的值);

这样服务端的数据库字符集就修改完成了。

修改客户端数据库字符集

客户端的字符集就不涉及到数据库的命令了,主要是Oracle客户端与数据库内置不一致导致的,修改安装数据库时的注册表就可以。

  • win + R,输入“regedit”进入注册表设置;
  • 按照以下目录层级找到目标位置:

    HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/KEY_OraDb11g_home1/NLS_LANG

  • 将这个变量的值设置为你想要修改的值即可。

这样客户端的字符集也设置完毕了。

目前字符集是设置完毕,可是原来是GBK的数据导入到了UTF8字符集的数据库里,再改回来也还是乱码,只能重新导入dmp备份文件了。下一篇就是总结的Oracle导入dmp文件的内容。
PS:目前自认技术还差的很远很远,几乎算是小白一个,所以,记录这些小的知识点不光是为了以后自己翻起来方便,而且对自己也是一种成长,也希望能帮到跟我一样的小白。我热爱这个行业,享受创造的过程,所以才需要更努力去见识更大的天空。知识浅显,还请各位莫要取笑。


参考资料:Fred、的窃窃私语博客


  1. 在这种模式下,服务器端只有拥有dba角色的用户和具有restrict session权限的用户才能连接数据库;在远程无论拥有什么角色都无法连接。在数据库做运维(变更)的情况下且不想其他会话连接到数据库,那么可以使用此种方式,避免其他用户连接。

相关文章

  • Oracle修改字符集

    背景:公司给更换了配置较高的笔记本,所以一切软件又要重新安装了,也是又一次翻着百度安装Oracle,技术不到家也好...

  • 修改oracle字符集

    先用sqlplus 系统用户登录: sqlplus / as sysdba; 然后执行下面的命令即可: **shu...

  • Oracle修改字符集

    1查询服务端字符集 2先用system和密码登陆SQLPLUS(如果不能直接以sys登陆到sqlplus的话),进...

  • 修改oracle字符集

    查看字符集 重启机器

  • centos 安装oracle 11g r2(四)-----修改

    centos 安装oracle 11g r2(四)-----修改字符集为ZHS16GBK 一、查询两个库的字符集 ...

  • Oracle字符集检查和修改

    Oracle字符集检查和修改 在部署重构版测试环境时,需要创建Oracle数据库,使用dbca创建数据库之后没有注...

  • Oracle导入、导出dmp文件

    前言:接上文Oracle修改字符集,此篇主要是针对Oracle数据库dmp文件的导入和导出操作。不特别添加plsq...

  • oracle之修改字符集

    参考链接 如何改oracle AL16UTF16为AL32UTF8——百度知道 建库时AL16UTF16字符集怎么...

  • 数据库不同字符集迁移

    数据库不同字符集迁移 一.引言 ORACLE 数据库字符集,即Oracle全球化支持(Globalization ...

  • 2019-04-16字符集 通配符

    修改字符集 永久修改字符集 重启xshell 原因 与远程工具不同字符集 排错 查看xshll字符集查看系统字符集...

网友评论

    本文标题:Oracle修改字符集

    本文链接:https://www.haomeiwen.com/subject/tojtdftx.html