oracle xe 手工建立ZHS16GBK字符集数据库

原创 2006年05月31日 09:54:00

oracle xe universal默认创建AL32UTF8字符集,这种字符集1个汉字占用3个字节,而
ZHS16GBK字符集1个汉字占用2个字节,为了节约空间,我尝试改变数据库的字符集,
但是失败了,因为新字符集不是旧字符集的超集。即使用restrict模式也不行。
考虑到oracle xe 安装时只是建一个空库,仅包含系统表空间等,设想通过手工执行
创建ZHS16GBK字符集数据库的办法实现。
从sybex的10g ocp教材中复制并修改得下面语句,其中E:/ORADATA/TEST是我们要存放
新数据库物理文件的目录,以和旧数据库区分。


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
;
在执行这个脚本以前,有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等目录,这些目录可以从现有的XE数据库F:/oraclexe/app/oracle/admin/XE复制得到。

2 要去掉EXTENT MANAGEMENT LOCAL语句否则执行出错。(没有找出原因)

CREATE DATABASE XE
*
第 1 行出现错误:
ORA-25146: EXTENT MANAGEMENT ?????

3 test.ora中的db_name不能改变,否则执行出错。(没有找出原因)
ORA-02778: Name given for the log directory is invalid

具体执行步骤(以Windows XP为例)
1在cmd命令行窗口执行 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 查看现有的字符集设置
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个字节
4 关闭数据库,但不停止服务
QL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
5 用修改过的pfile test.ora启动数据库(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 执行建立数据库脚本
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  ;

数据库已创建。
7 执行创建数据字典和程序包的系统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 关闭数据库,但不停止服务
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
9 用修改过的pfile test.ora启动数据库
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
数据库装载完毕。
数据库已经打开。
10 查看新建数据库的字符集设置
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 行。
可见我们新的数据库的确是ZHS16GBK字符集,1个汉字占用2个字节
11 要启动旧数据库(因为新旧数据库同名,而且oracle xe限制同时只能打开一个数据库)
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
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
数据库装载完毕。
数据库已经打开。

----

如果以后要用spfile自动新建数据库
SQL> create spfile from pfile='D:/oraclexe/app/oracle/product/10.2.0/server/config/scripts/test.ora';

文件已创建。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
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
数据库装载完毕。
数据库已经打开。
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]
的问题也算得到了解决

oracle xe快捷版本介绍

今天给大家推荐一款轻量级Oracle数据库,即Oracle10G快捷版(Oracle XE)。 相对于庞大的原正式版来说,快捷版只有206MB大,而且可以安装在自己电脑上,跑起来也并不影响速度,可用...
  • Angiexia
  • Angiexia
  • 2013年02月26日 22:32
  • 13616

Oracle XE安装详解

一、原数据库的卸载       数据库的卸载就不多说了,讲一下过程:       1、执行Oracle Uninstall,卸载Oracle产品     2、删除rege...

Oracle XE 数据库与连接工具安装使用

一、Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程序员熟悉Oracle使用也有机会接触到...

修改 oracle xe 字符集 ZHS16GBK

Oracle XE 执行安装程序后,很简单的默认为 SIMPLIFIED CHINESE_CHINA.AL32UTF8 ,通过如下方法可以修改成为 ZHS16GBK 。 客户端的字符集要求与服务器一...
  • tajun77
  • tajun77
  • 2016年04月21日 19:23
  • 995

oracle数据库字符集AL32UTF8修改为ZHS16GBK即从超集到子集

问题: 一个汉字用GBK存放是2个字符,用AL32UTF8占用3个字符,问题来了: 一个字段A varchar2(10)存放了5个汉字,但是存放AL32UTF8的只能存放3个, 所以在由ZHS16GB...

ORACLE11g数据库字符集从ZHS16GBK转为UTF8

如果想要搞清楚Oracle的字符系统,需要紧紧地抓住三个因素: 一.“客户终端字符集” 二.“NLS_LANG”环境变量 三.“数据库字符集” 数据库字符集查看方法:select * from nl...
  • gtt875
  • gtt875
  • 2017年04月26日 12:53
  • 3485

ORACLE11g数据库字符集从ZHS16GBK转为UTF8遗留问题的解决

在之前我写的一篇博客:ORACLE11g数据库字符集从ZHS16GBK转为UTF8中存在一个没有完美解决的问题:      最后经过我公司技术大牛王华文的努力和研究,提出了一个比较完美的解决方案: ...
  • gtt875
  • gtt875
  • 2017年05月18日 10:03
  • 404

复制Oracle数据库中文字符集AMERICAN_AMERICA.ZHS16GBK到目的库Oracle字符集AL32UTF8

复制Oracle数据库中文字符集AMERICAN_AMERICA.ZHS16GBK到目的库Oracle字符集AL32UTF8 翻译自: Replicate Chinese Characters AM...

Linux 下修改Oracle 的字符集:WE8ISO8859P1 修改为 ZHS16GBK

问题描述:同事在Linux下安装的Oracle,默认的字符集没有修改,使用的是WE8ISO8859P1,不能够支持中文,   问题表现为,客户端录入的中文数据可以显示,提交之后再查询出来后中文会显...

Oracle11g 字符集 AL32UTF8 修改为ZHS16GBK详解

今天下午在部署HP的一台数据库服务器时,装的oracle11g 企业版默认字符集为AL32UTF8,     而我本地电脑装的oracle11g 个人版数据库字符集server端默认是ZHS16GBK...
  • kurl888
  • kurl888
  • 2014年12月14日 21:47
  • 3197
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle xe 手工建立ZHS16GBK字符集数据库
举报原因:
原因补充:

(最多只允许输入30个字)