快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

oracle怎么改字 oracle怎么改字符集

oracle安装后怎么修改字符集

数据库字符集在创建后原则上不能更改。不过有2种方法可行。

鲤城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

1. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。

2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。

oracle中怎么更改表中字段名?

首先方法是使用RENAME关键字:

修改字段名:alter table 表名 rename column 现列名 to 新列名;

修改表名:alter table 表名 rename to 新表名

增加字段语法:alter table tablename add (column datatype [default value][null/not null],….);

说明:alter table 表名 add (字段名 字段类型 默认值 是否为空);

例:alter table sf_users add (HeadPIC blob);

例:alter table sf_users add (userName varchar2(30) default '空' not null);

修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….);

说明:alter table 表名 modify (字段名 字段类型 默认值 是否为空);

例:alter table sf_InvoiceApply modify (BILLCODE number(4));

删除字段的语法:alter table tablename drop (column);

说明:alter table 表名 drop column 字段名;

例:alter table sf_users drop column HeadPIC;

字段的重命名:

说明:alter table 表名 rename  column  列名 to 新列名   (其中:column是关键字)

例:alter table sf_InvoiceApply rename column PIC to NEWPIC;

表的重命名:

说明:alter table 表名 rename to  新表名

例:alter table sf_InvoiceApply rename to  sf_New_InvoiceApply;

oracle怎么更改分区关键字

默认情况下,oracle的分区表对于分区字段是不允许进行update操作的,如果有对分区字段行进update,就会报错——ORA-14402: 更新分区关键字列将导致分区的更改。但是可以通过打开表的row movement属性来允许对分区字段的update操作。

例:创建分区表test_part进行实验

create table TEST_PART

(

A1 NUMBERnot null,

A2 DATE not null,

A3 VARCHAR2(6) not null,

A4 DATE not null,

A5 NUMBER not null,

)

partition by range (A1)

(

partition P1 values less than (1000),

partition P2 values less than (2000),

partition P3 values less than (3000),

partition P4 values less than (4000),

partition P5 values less than (5000),

partition P6 values less than (MAXVALUE)

);

插入如下的数据

SQL select * from test_part;

A1 A2 A3 A4 A5

---------- ----------- ------ ----------- ----------

123 2006-06-30 123456 2006-06-30 123

456 2006-06-30 asdfgh 2006-06-30 456

1 2006-06-30 234123 2006-06-30 1

2 2006-06-30 234234 2006-06-30 2

1234 2006-06-30 456789 2006-06-30 1234

1111 2006-06-30 ewrqwe 2006-06-30 1111

2222 2006-06-30 fdafda 2006-06-30 2222

3333 2006-06-30 342342 2006-06-30 3333

5678 2006-06-30 qwerty 2006-06-30 5678

9 rows selected

分区P1、P2的数据分别为:

SQL select rowid,t.* from test_part partition(p1) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLoAAGAAAtsEAAB 456 2006-06-30 asdfgh 2006-06-30 456

AAAGLoAAGAAAtsEAAC 1 2006-06-30 234123 2006-06-30 1

AAAGLoAAGAAAtsEAAD 2 2006-06-30 234234 2006-06-30 2

AAAGLoAAGAAAtsEAAE 123 2006-06-30 123456 2006-06-30 123

SQL select rowid,t.* from test_part partition(p2) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234

AAAGLwAAGAAA+8MAAD 1111 2006-06-30 ewrqwe 2006-06-30 1111

直接update提示错误

SQL update test_part set a1=1123 where a1=123;

update test_part set a1=1123 where a1=123

ORA-14402: 更新分区关键字列将导致分区的更改

打开row movement属性

SQL alter table test_part enable row movement;

Table altered

再次执行update操作

SQL update test_part set a1=1123 where a1=123;

1 row updated

执行是成功的并迁移到分区P2上了,且这时候rowid也发生了变化

SQL select rowid,t.* from test_part partition(p2) t;

ROWID A1 A2 A3 A4 A5

------------------ ---------- ----------- ------ ----------- ----------

AAAGLwAAGAAA+8MAAC 1234 2006-06-30 456789 2006-06-30 1234

AAAGLwAAGAAA+8MAAD 1111 2006-06-30 ewrqwe 2006-06-30 1111

AAAGLwAAGAAA+8PAAB 1123 2006-06-30 123456 2006-06-30 123

SQL

enable row movement可以允许数据段的压缩、update分区字段的数据(跨分区的)

如何更改Oracle字符集

转载自寒思国内最常用的Oracle字符集ZHS16GBK(GBK

16-bit

Simplified

Chinese)能够支持繁体中文,并且按照2个字符长度存储一个汉字。UTF8字符集是多字节存储,1个汉字(简体、繁体)有时采用3个字符长度存储。

Oracle支持字符集的更改,但是UTF8是Oracle中最大的字符集,也就是说UTF8是ZHS16GBK的严格超集。

对于子集到超集的转换,Oracle是允许的,但是对于超集到子集的转换是不允许的。一般对于超集到子集的转换,建议是通过dbca删除原来的数据库,重新再建库,选择正确的字符集,然后导入备份。

我的方案是:先备份数据,然后强制转换字符集从UTF8到ZHS16GBK,然后导入备份数据。如果不行,才来重新建库,设置字符集ZHS16GBK,导入备份数据。如果这还不行,就把更改字符集从ZHS16GBK到UTF8(这是安全的),再导入备份数据,恢复到原始状况。这样就有可能避开重新建库的麻烦。

1.

备份数据库中所有用户的数据

以oracle用户登陆,执行以下命令

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.UTF8”

保持与数据库服务器端一致,这样在exp导出时,就不会存在字符的转换了,备份最原始的数据。

2.

评估UTF8转换成ZHS16GBK的风险

转换之前,要使用Oracle的csscan工具对数据库扫描,评估字符集转换前后,数据有可能的损坏情况。如果评估情况糟糕,那就绝对要放弃了。

先安装属于

CSMIG

用户的一套表和过程。以oracle用户登陆UNIX,

#sqlplus

“/

as

sysdab”

SQL@$ORACLE_HOME/

rdbms/admin/csminst.sql

SQLexit

#

$ORACLE_HOME\bin\csscan

-help

可以更清楚如何使用csscan。

#

$ORACLE_HOME/bin/csscan

system/sunday

user=mmsc

FROMCHAR=UTF8

TOCHAR=ZHS16GBK

ARRAY=102400

PROCESS=3

csscan.log

以上命令意思是扫描用户:mmsc中的所有数据,从字符集UTF8更改为ZHS16GBK的转换情况。然后得到三个文件:scan.txt、scan.out、scan.err。

查看scan.out,scan.err,可以看出mmsc用户下的所有的数据都是可以转换的,并且没有出现转换“Exceptional”的情况,因此可以更放心一点。

3.

更改数据库的字符集为ZHS16GBK

前面说过,通过命令“Alter

Database

Characeter

Set

XXXX”,实现从超集到子集的转换,在Oracle是不允许的。但是该命令,提供这样的命令方式:

Alter

Database

Character

Set

INTERNAL_CONVERT/

INTERNAL_USE

XXXX

这是Oracle的非公开命令。“在使用这个命令时,Oracle会跳过所有子集及超集的检查,在任意字符集之间进行强制转换,所以,使用这个命令时你必须十分小心,你必须清楚这一操作会带来的风险”。

以oracle用户登陆UNIX,

#sqlplus

“/

as

sysdba”

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP

MOUNT;

SQL

ALTER

SESSION

SET

SQL_TRACE=TRUE;

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;

//如果不使用“INTERNAL_USE”参数,系统会提示出错:

//ERROR

at

line

1:

//ORA-12712:

new

character

set

must

be

a

superset

of

old

character

set

SQL

ALTER

SESSION

SET

SQL_TRACE=FALSE;

SQL

SHUTDOWN

IMMEDIATE;

SQL

STARTUP;

此时,检查一下数据库的字符集是否更改过来

SQL

select

value$

from

props$

where

name=’NLS_CHARACTERSET’;

VALUE$

-----------------

ZHS16GBK

紧接着检查一下数据库中简体中文、繁体中文是否正常,不会出现乱码。

SQLselect

spid,spname,spshortname

from

spinfovisual_hk

…...

非常不幸,我看到了一堆乱码,这也证明了Oracle不支持字符集从超集到子集的更改,当时心里很紧张,很怕失败,从而恢复到原样。

但是根据以前的验证,把UTF8下的备份导入到ZHS16GBK中去,是OK的,所以继续尝试。

4.

导入备份的用户数据

还是以oracle用户登陆UNIX,

先删除库中的用户mmsc:

#sqlplus

“/

as

sysdba”

SQLdrop

user

mmsc

cascade;

SQLexit

再运行createuser.sql,生成mmsc用户。

然后使用原来的备份文件,导入到mmsc用户中:

注意:先设置NLS_LANG要与当前数据库的一致:ZHS16GBK。这样,导出时用户会话的NLS_LANG为UTF8,与原先的数据库字符集一致;现在为ZHS16GBK,与此时的数据库字符集一致。这样,导入时,就会进行字符转换。

#

export

NLS_LANG

=

“SIMPLIFIED

CHINESE_CHINA.ZHS16GBK”

#imp

mmsc/mmsc@mdspdb

file=DSMPD113_user_mmsc.dmp

ignore=y

fromuser=mmsc

touser=mmsc

马上查看数据库中简体、繁体中文,哈哈,没有乱码了,一切显示正常。

紧接着进行验证,也证明了:1个汉字此时只占用2个字符长度。问题解决了!

oracle 10如何修改字符集?

1.修改服务器端oracle默认字符集:打开“开始菜单”,在“运行”里输入“cmd”,回车,进入命令行编

辑模式。输入“sqlplus /nolog”,回车。修改默认字符集,以sysdba的身份执行SQL语句。输入“conn

sys/password@orcl as sysdba;”,回车。输入“select name,value$ from props$ where

name like

’%NLS%’;”,查看默认字符集。找到“NLS_CHARACTERSET”,其值为“WE8ISO8859P1”。

2.修改客户端sqlplus默认字符集:打开“开始菜单”,

在“运行”里输入“regedit”,回车,进入注册表编辑器。按CTRL+F,输入“NLS_LANG”,回车,找到sqlplus软件目录下的

NLS_LANG,其键值为“WE8ISO8859P1”。双击“NLS_LANG”,输入“ZHS16GBK”,点击“确定”按钮保存重启计算

机。


网站标题:oracle怎么改字 oracle怎么改字符集
标题网址:http://6mz.cn/article/hepiop.html

其他资讯