纸上得来终觉浅,绝知此事要躬行,又到了实践的时刻。不过好久没写过文章了,这生锈的文笔也得努力跟上节奏,哈哈哈哈~~~

        好了,言归正传,今天要实践的是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

好了,现在可以出去溜一圈儿了,经过漫长等待后就可以啦。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐