oracle xe universal默認創(chuàng)建AL32UTF8字符集,這種字符集1個漢字占用3個字節(jié),而
ZHS16GBK字符集1個漢字占用2個字節(jié),為了節(jié)約空間,我嘗試改變數(shù)據庫的字符集,
但是失敗了,因為新字符集不是舊字符集的超集。即使用restrict模式也不行。
考慮到oracle xe 安裝時只是建一個空庫,僅包含系統(tǒng)表空間等,設想通過手工執(zhí)行
創(chuàng)建ZHS16GBK字符集數(shù)據庫的辦法實現(xiàn)。
從sybex的10g ocp教材中復制并修改得下面語句,其中E:\ORADATA\TEST是我們要存放
新數(shù)據庫物理文件的目錄,以和舊數(shù)據庫區(qū)分。
CREATE DATABASE XE
CONTROLFILE REUSE
LOGFILE
GROUP 1 'E:\ORADATA\TEST\REDO01.LOG' SIZE 10M,
GROUP 2 'E:\ORADATA\TEST\REDO02.LOG' SIZE 10M,
GROUP 3 'E:\ORADATA\TEST\REDO03.LOG' SIZE 10M
DATAFILE 'E:\ORADATA\TEST\SYSTEM01.DBF' SIZE 400M
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE 'E:\ORADATA\TEST\SYSAUX01.DBF' SIZE 250M
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
TEMPFILE 'E:\ORADATA\TEST\TEMP01.DBF' SIZE 100M
AUTOEXTEND ON NEXT 100M MAXSIZE 8000M
UNDO TABLESPACE undo
DATAFILE 'E:\ORADATA\TEST\undo01.DBF' SIZE 200M
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL
CHARACTER SET ZHS16GBK
NATIONAL CHARACTER SET AL16UTF16
USER SYS IDENTIFIED BY SYS
USER SYSTEM IDENTIFIED BY SYS
;
在執(zhí)行這個腳本以前,有3點要注意:
1 要修改F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\init.ora'
到
F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
把所有路徑改成E:\ORADATA\TEST及其子目錄,為此我們需要在E:\ORADATA\TEST下建立
bdump等目錄,這些目錄可以從現(xiàn)有的XE數(shù)據庫F:\oraclexe\app\oracle\admin\XE復制得到。
2 要去掉EXTENT MANAGEMENT LOCAL語句否則執(zhí)行出錯。(沒有找出原因)
CREATE DATABASE XE
*
第 1 行出現(xiàn)錯誤:
ORA-25146: EXTENT MANAGEMENT ?????
3 test.ora中的db_name不能改變,否則執(zhí)行出錯。(沒有找出原因)
ORA-02778: Name given for the log directory is invalid
具體執(zhí)行步驟(以Windows XP為例)
1在cmd命令行窗口執(zhí)行 net start oracleservicexe
C:\Documents and Settings\Administrator>net start oracleservicexe
OracleServiceXE 服務正在啟動 .........
OracleServiceXE 服務已經啟動成功。
2 以sys用戶登錄
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 5月 30 22:07:45 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
已連接。
3 查看現(xiàn)有的字符集設置
SQL> set lines 140
SQL> select * from nls_database_parameters;
PARAMETER
------------------------------------------------------------
VALUE
-------------------------------------------------------------------
------------------------------------------------------------
NLS_LANGUAGE
AMERICAN
NLS_TERRITORY
AMERICA
NLS_CURRENCY
$
NLS_ISO_CURRENCY
AMERICA
NLS_NUMERIC_CHARACTERS
.,
NLS_CHARACTERSET
AL32UTF8
NLS_CALENDAR
GREGORIAN
NLS_DATE_FORMAT
DD-MON-RR
NLS_DATE_LANGUAGE
AMERICAN
NLS_SORT
BINARY
NLS_TIME_FORMAT
HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY
$
NLS_COMP
BINARY
NLS_LENGTH_SEMANTICS
BYTE
NLS_NCHAR_CONV_EXCP
FALSE
NLS_NCHAR_CHARACTERSET
AL16UTF16
NLS_RDBMS_VERSION
10.2.0.1.0
已選擇20行。
SQL> select lengthb('擇') from dual;
LENGTHB('擇')
-------------
3
已選擇 1 行。
我們可以看到,當前AL32UTF8字符集1個漢字占用3個字節(jié)
4 關閉數(shù)據庫,但不停止服務
QL> shutdown immediate
數(shù)據庫已經關閉。
已經卸載數(shù)據庫。
ORACLE 例程已經關閉。
5 用修改過的pfile test.ora啟動數(shù)據庫(nomount)
SQL> startup nomount pfile='F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
ORACLE 例程已經啟動。
Total System Global Area 285212672 bytes
Fixed Size 1287016 bytes
Variable Size 92277912 bytes
Database Buffers 188743680 bytes
Redo Buffers 2904064 bytes
6 執(zhí)行建立數(shù)據庫腳本
SQL> CREATE DATABASE XE
2 CONTROLFILE REUSE
3 LOGFILE
4 GROUP 1 'E:\ORADATA\TEST\REDO01.LOG' SIZE 10M,
5 GROUP 2 'E:\ORADATA\TEST\REDO02.LOG' SIZE 10M,
6 GROUP 3 'E:\ORADATA\TEST\REDO03.LOG' SIZE 10M
7 DATAFILE 'E:\ORADATA\TEST\SYSTEM01.DBF' SIZE 400M
8 AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
9 SYSAUX DATAFILE 'E:\ORADATA\TEST\SYSAUX01.DBF' SIZE 250M
10 AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED
11 DEFAULT TEMPORARY TABLESPACE temp
12 TEMPFILE 'E:\ORADATA\TEST\TEMP01.DBF' SIZE 100M
13 AUTOEXTEND ON NEXT 100M MAXSIZE 8000M
14 UNDO TABLESPACE undo
15 DATAFILE 'E:\ORADATA\TEST\undo01.DBF' SIZE 200M
16 AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
17 CHARACTER SET ZHS16GBK
18 NATIONAL CHARACTER SET AL16UTF16
19 USER SYS IDENTIFIED BY SYS
20 USER SYSTEM IDENTIFIED BY SYS
21 ;
數(shù)據庫已創(chuàng)建。
7 執(zhí)行創(chuàng)建數(shù)據字典和程序包的系統(tǒng)SQL腳本
@F:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catalog.sql
@F:\oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN\catproc.sql
大約需要10幾分鐘
8 關閉數(shù)據庫,但不停止服務
SQL> shutdown immediate
數(shù)據庫已經關閉。
已經卸載數(shù)據庫。
ORACLE 例程已經關閉。
9 用修改過的pfile test.ora啟動數(shù)據庫
SQL> startup pfile='F:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora'
ORACLE 例程已經啟動。
Total System Global Area 285212672 bytes
Fixed Size 1287016 bytes
Variable Size 92277912 bytes
Database Buffers 188743680 bytes
Redo Buffers 2904064 bytes
數(shù)據庫裝載完畢。
數(shù)據庫已經打開。
10 查看新建數(shù)據庫的字符集設置
SQL> set lines 140
SQL> select * from nls_database_parameters;
PARAMETER VALUE
------------------------------ -------------------------------------------------
-------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
已選擇20行。
SQL> select lengthb('A') from dual;
LENGTHB('A')
------------
1
已選擇 1 行。
SQL> select lengthb('擇') from dual;
LENGTHB('擇')
-------------
2
已選擇 1 行。
可見我們新的數(shù)據庫的確是ZHS16GBK字符集,1個漢字占用2個字節(jié)
11 要啟動舊數(shù)據庫(因為新舊數(shù)據庫同名,而且oracle xe限制同時只能打開一個數(shù)據庫)
SQL> shutdown immediate
數(shù)據庫已經關閉。
已經卸載數(shù)據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 285212672 bytes
Fixed Size 1287016 bytes
Variable Size 96472216 bytes
Database Buffers 184549376 bytes
Redo Buffers 2904064 bytes
數(shù)據庫裝載完畢。
數(shù)據庫已經打開。
----
如果以后要用spfile自動新建數(shù)據庫
SQL> create spfile from pfile='D:\oraclexe\app\oracle\product\10.2.0\server\config\scripts\test.ora';
文件已創(chuàng)建。
SQL> shutdown immediate;
數(shù)據庫已經關閉。
已經卸載數(shù)據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 285212672 bytes
Fixed Size 1287016 bytes
Variable Size 92277912 bytes
Database Buffers 188743680 bytes
Redo Buffers 2904064 bytes
數(shù)據庫裝載完畢。
數(shù)據庫已經打開。
SQL> select lengthb('擇') from dual;
LENGTHB('擇')
-------------
2
已選擇 1 行。
遠程登錄,客戶端也需要10g
SQL> conn system/sys@//10.6.xx.xx:1521/XE
已連接。
SQL> conn sys/sys@//10.6.xx.xx:1521/XE as sysdba
已連接。
[url]http://www.itpub.net/558697.html[/url]
的問題也算得到了解決
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/l1t/archive/2006/05/31/765125.aspx
久久不醉