oracle 修改nls_characterset,ORACLE NLS_CHARACTERSET字符集的更改
ORACLE NLS_CHARACTERSET字符集的更改 數(shù)據(jù)庫創(chuàng)建以后,如果需要修改字符集,通常需要重建數(shù)據(jù)庫,通過導(dǎo)入導(dǎo)出的方式來轉(zhuǎn)換。 我們也可以通過以下方式更改 ALTER DATABASE CHARACTER SET 注意:修改數(shù)據(jù)庫字符集時(shí)必須謹(jǐn)慎,修改之前一定要為數(shù)據(jù)庫備份。由于不能回退這項(xiàng)操作,因此可能會(huì)造成數(shù)據(jù)丟失或者損壞。 這是最簡單的轉(zhuǎn)換字符集的方式,但并不總是有效。 這個(gè)命令在Oracle8時(shí)被引入Oracle,這個(gè)操作在本質(zhì)上并不轉(zhuǎn)換任何數(shù)據(jù)庫字符,只是簡單的更新數(shù)據(jù)庫中所有跟字符集相關(guān)的信息。 這意味著,你只能在新字符集是舊字符集嚴(yán)格超集的情況下使用這種方式轉(zhuǎn)換。 所謂超集是指: 當(dāng)前字符集中的每一個(gè)字符在新字符集中都可以表示,并使用同樣的代碼點(diǎn) 比如很多字符集都是US7ASCII的嚴(yán)格超集。 如果不是超集,將獲得以下錯(cuò)誤: SQL> ALTER DATABASE CHARACTER SET ZHS16CGB231280; ALTER DATABASE CHARACTER SET ZHS16CGB231280 * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 下面我們來看一個(gè)測試(以下測試在Oracle9.2.0下進(jìn)行,Oracle9i較Oracle8i在編碼方面有較大改變,在Oracle8i中,測試結(jié)果可能略有不同): SQL> select name,value$ from props$ where name like '%NLS%'; NAME VALUE$ ------------------------------ ------------------------------ NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET US7ASCII NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN …… NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 9.2.0.4.0 20 rows selected. SQL> select name,dump(name) from eygle.test; NAME DUMP(NAME) ------------------------------------------------------ 測試 Typ=1 Len=4: 178,226,202,212 Test Typ=1 Len=4: 116,101,115,116 2 rows selected.
轉(zhuǎn)換字符集,數(shù)據(jù)庫應(yīng)該在RESTRICTED模式下進(jìn)行。 c:\>sqlplus “/ as sysdba” SQL*Plus: Release 9.2.0.4.0 - Production on Sat Nov 1 10:52:30 2003 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. Connected to: Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production With the Partitioning, Oracle Label Security, OLAP and Oracle Data Mining options JServer Release 9.2.0.4.0 - Production SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> STARTUP MOUNT; ORACLE instance started. Total System Global Area 76619308 bytes Fixed Size 454188 bytes Variable Size 58720256 bytes Database Buffers 16777216 bytes Redo Buffers 667648 bytes Database mounted. SQL> ALTER SESSION SET SQL_TRACE=TRUE; Session altered. SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; System altered. SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; System altered. SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; System altered. SQL> ALTER DATABASE OPEN; Database altered. SQL> set linesize 120 SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12721: operation cannot execute when other sessions are active SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12716: Cannot ALTER DATABASE CHARACTER SET when CLOB data exists 在Oracle9i中,如果數(shù)據(jù)庫存在CLOB類型字段,那么就不允許對字符集進(jìn)行轉(zhuǎn)換 SQL>
總結(jié)
以上是生活随笔為你收集整理的oracle 修改nls_characterset,ORACLE NLS_CHARACTERSET字符集的更改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个二级路由建立局域网设置局域网如何设置
- 下一篇: 小米集团发布第二季度财报 雷军披露电动汽