Windows 11家庭版与Oracle数据库的“非典型邂逅”
查了老库编码是ZHS16GBK,新库是 AL32UTF8,原有的字符串在新库里面需要占用更多字节,比如汉字原来占2个,现在需要占用3个了。查了下,AL32UTF8 是一个广泛使用的字符集,支持Unicode标准,兼容ASCII 码,对于拉丁文、希腊文等使用两个字节,而包括汉字在内的其他常用字符则使用三个字节进行编码,能够表示世界上几乎所有的字符。压缩包很小,300多兆,安装也很简单,分分钟就好了。
纸上得来终觉浅,绝知此事要躬行,又到了实践的时刻。不过好久没写过文章了,这生锈的文笔也得努力跟上节奏,哈哈哈哈~~~
好了,言归正传,今天要实践的是win11 家庭版 64位操作系统 下 Oracle 数据库的安装、数据导出与导入。本着“简约至上,好用为王”的原则,我们瞄准最新版的轻量级数据库23ai Free版本。没错,就是下面的。
地址:Database Software Downloads | Oracle 中国
然而,现实总是比梦想骨感那么一点点。安装程序直接给我来了个下马威,提示:请验证是否未设置以下环境变量ORACLE_HOME和TNS_ADMIN。我心想:“这啥玩意儿?要配置环境变量?”于是,我开始了与注册表、程序日志、JDK版本的“深度交流”,企图用知识的光芒照亮这条未知的安装之路。但结果嘛,就像是用火柴去点亮一座灯塔,除了把自己搞得焦头烂额,啥也没改变。
好吧,新版本咱不伺候了,换个版本试试。结果呢?快安装完时它自己又撤退了,搞得我哭笑不得。这时,官方文档幽幽地告诉我:“家庭版?不好意思,我们不熟。”我顿时感觉心拔凉拔凉的。
既然新版无缘,那就回归经典吧!我瞄准了与老数据库同一个版本Oracle 11g,开始了一场“寻宝”之旅。经过一番波折,终于在CSDN博客的某个角落找到了下面的宝藏链接。
原博客地址:oracle 11g 服务端下载地址及安装说明_oracle11g下载地址-CSDN博客
win 64位操作系统 下载地址:
http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip
http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_2of2.zip
本以为下载、安装,一气呵成,结果…… 登录 oracle 后,提示了下面的错误,必须同意什么条款。然后,按照它说的,从这里我可以走了。
试了快一天了,感觉快山穷水尽了。突然想到,联想管家中会不会有,还真找到了!!!具体安装包我已经上传云盘了。
地址是:链接:https://pan.baidu.com/s/1OYgrHrNA7khUb-ImuXUQqQ?pwd=47fn
提取码:47fn
压缩包很小,300多兆,安装也很简单,分分钟就好了。安装后,桌面上会生成一个图标:打开后,是个网页版的数据库管理平台,后面有时间再研究吧。
接下来是数据导出导入环节。
第一步:使用PL/SQL 导出数据:
第二步:导入数据库,3.7G,好家伙,试了下,PL/SQL已经罢工了,使用SqlPlus 命令行吧。
sqlplus sys as sysdba; -- 使用 dba 用户登录
@C:\Users\lsh\Desktop\test.sql -- 导入数据库
刚开始还挺顺利,结果没多久,报错信息就像雨点般砸来。仔细一看,提示:提示ORA-12899: value too large for column "TEST"."ATTENDANCE_RESULT_ITEM"."REMARK" (actual: 246, maximum: 200),原来是字符串长度超限了。哎,这新老数据库的编码差异,真是让人头疼!原因很简单,同样数据结构同样数据。查了老库编码是ZHS16GBK,新库是 AL32UTF8,原有的字符串在新库里面需要占用更多字节,比如汉字原来占2个,现在需要占用3个了。
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET'; -- 查编码
查了下,AL32UTF8 是一个广泛使用的字符集,支持Unicode标准,兼容ASCII 码,对于拉丁文、希腊文等使用两个字节,而包括汉字在内的其他常用字符则使用三个字节进行编码,能够表示世界上几乎所有的字符。
怎么办?马上想到的2个思路:一是加长表字段长度,稳妥但费时费力;二是直接改数据库编码,简单粗暴但风险不小。考虑到这是个空库,我果断选择了后者。说干就干,步骤如下(截图在下面):
1、关闭数据库:
以DBA身份登录到SQL Plus或其他数据库管理工具,然后关闭数据库:
SHUTDOWN IMMEDIATE;
2、启动数据库到MOUNT状态:
此时数据库将进入一种状态,数据库管理员可以执行管理任务,外部用户无法访问数据库;
STARTUP MOUNT;
3、设置会话限制:
将数据库设置为受限会话模式,并禁用与修改字符集无关的进程:
ALTER SYSTEM ENABLE RESTRICTED SESSION; -- 开启数据库受限会话模式(只有DBA用户能访问,且只能本地连接)
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; -- 阻止任何新的作业被调度执行,但不影响正在执行的作业
ALTER SYSTEM SET AQ_TM_PROCESSES=0; -- 停止高级队列相关进程
4、打开数据库:
ALTER DATABASE OPEN;
5、修改字符集:
首先,尝试直接修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
注意:当前字符集AL32UTF8不是ZHS16GBK的超集,上述命令可能会失败,并返回错误ORA-12712。在这种情况下,可以使用
INTERNAL_USE
选项来强制更改(但请注意,这可能会导致数据丢失或损坏,因此仅在没有其他选择的情况下使用):
ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
6、重启数据库:
关闭并重启数据库以使更改生效:
SHUTDOWN IMMEDIATE;
STARTUP;
7、验证更改是否完成
SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';
执行成功,截图如下:
至此,数据库编码成功由AL32UTF8 改为 ZHS16GBK。
下来就是导入数据库环节:
sqlplus test/123456 -- 登录test用户
@C:\Users\lsh\Desktop\test.sql -- 导入数据test.sql
好了,现在可以出去溜一圈儿了,经过漫长等待后就可以啦。
更多推荐
所有评论(0)