oracle 11g修改字符集

數據庫插入報錯插入某列的值太大(性別)   該列長度爲1  實際值爲4  數據庫拋出異常

最後發現是字符集的問題。改字符集就好了,對中文不友好。。。

以下是執行命令的全部過程:

 

第一步:啓動sqlplus

C:\Users\dszho>sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 6月 22 09:56:04 2017

Copyright (c) 1982, 2010, Oracle. All rights reserved.

 

第二步:使用system sysdba帳號登錄

請輸入用戶名: system as sysdba
輸入口令:

連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

第三步:關閉數據庫

SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。

 

第四步:以mount啓動
SQL> startup mount;
ORACLE 例程已經啓動。

Total System Global Area 3423965184 bytes
Fixed Size 2180544 bytes
Variable Size 1862273600 bytes
Database Buffers 1543503872 bytes
Redo Buffers 16007168 bytes
數據庫裝載完畢。

 

第五步:調整session

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 AL32UTF8;
ALTER DATABASE CHARACTER SET AL32UTF8
*
第 1 行出現錯誤:
ORA-12712: 新字符集必須爲舊字符集的超集


SQL> ALTER DATABASE character set INTERNAL_USE AL32UTF8;

數據庫已更改。

SQL> select * from v$nls_parameters;

PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
AL32UTF8


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已選擇19行。

 

第七步:關閉數據庫並重新啓動

SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。

Total System Global Area 3423965184 bytes
Fixed Size 2180544 bytes
Variable Size 1862273600 bytes
Database Buffers 1543503872 bytes
Redo Buffers 16007168 bytes
數據庫裝載完畢。
數據庫已經打開。

 

第八步:查看是否修改成功

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

 

可以看到已經修改成功。

 

每個人遇到的問題不一樣,所以要多多研究。

 

備註:遇到的問題

在PL/SQL中運行這些語句是不行的,而且可能導致所有帳號都無法通過PL/SQL進行登錄

解決辦法:啓動sqlplus,login:sys as sysdba 講session改回去。重啓電腦即可。

 

注意:

SERVICE_NAME要設置正確,否則會出現在PL/SQL中編碼未修改過來的問題。

 

 

 

1、修改server端字符集(不建議使用)

  在oracle 8之前,可以用直接修改數據字典表props$來改變數據庫的字符集。但oracle8之後,至少有三張系統表記錄了數據庫字符集的信息,只改props$表並不完全,可能引起嚴重的後果。正確的修改方法如下:

  $sqlplus /nolog

  SQL>conn / as sysdba;

以上方法測試不行,用scott/tiger登陸sqlplus然後connect sys/sys as sysdba,然後輸入命令即可

  若此時數據庫服務器已啓動,則先執行SHUTDOWN IMMEDIATE命令關閉數據庫服務器,然後執行以下命令:

  SQL>STARTUP MOUNT;

  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 INTERNAL_USE ZHS16GBK; //跳過超子集檢測

  SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

這一行不起作用,執行後出錯ORA-00933: SQL 命令未正確結束,不過執行上一行命令已經生效,其他文章裏未提到本行。

  SQL>SHUTDOWN IMMEDIATE;

  SQL>STARTUP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章