在成功体验了 Windows 版本的Oracle 11g 后,这几天心血来潮,决定再挑战一下Linux 环境下的安装,特别是在考虑到部门内部虚拟机无法联网的情况下,我选择了在CentOS 7上进行离线安装。这次安装之旅,主要参考了下面大佬的详尽教程,并结合自身实践进行了必要的补充与调整。
参考文章: Linux 下静默安装/无网络安装/ Oracle 11g 11.2.0 步骤(CentOS 7)_centos7离线安装oracle数据库-CSDN博客
好了,说干就干。
第一步:构建基础环境
首先,我安装了VMware 17.5.1 build-23298084作为虚拟机平台,随后下载并安装了CentOS 7操作系统,以便为下载 oracle 基础安装包做准备。虽然寻找合适的安装包稍显繁琐,但系统的安装过程却相当顺畅。
说明:所需的安装包以及第二步所需基础安装包均已上传,地址如下:
链接:https://pan.baidu.com/s/1qctZHfXG1v6xu2olWTlAEw?pwd=kyx0
提取码:kyx0
第二步:准备 Oracle 所需基础安装资源
在无法联网的环境下,我提前下载并上传好了Oracle 11g所需的所有安装包及依赖库,确保安装过程中不会因缺少资源而中断。
bash
yum install --downloadonly --downloaddir=/tmp/ compat-libstdc++-33 elfutils-libelf-devel gcc* glibc-* ksh libaio libaio-devel libstdc++-devel unixODBC unixODBC-devel sysstat -y
第三步:静默安装Oracle 11g
依据参考文章中的步骤,我顺利完成了Oracle 11g的离线安装。安装完成后,我立即创建了hr 用户及其对应的表空间,为后续操作打好了基础。
sql
-- 使用 dba 身份免密登录
sqlplus / as sysdba
-- 新建用户 hr
create user hr identified by 123456;
-- 赋权限(使用第1个即可,session 权限只能连接数据库,不能创建表)
(1)GRANT CONNECT, RESOURCE TO hr;
(2)GRANT CREATE SESSION TO hr;
-- 创建表空间
CREATE TABLESPACE hr_data
DATAFILE '/u01/app/oracle_data/hr_data01.dbf' -- 替换为实际的文件路径
SIZE 100M -- 初始大小,可以根据需要调整
AUTOEXTEND ON -- 开启自动扩展
NEXT 50M -- 下一次自动扩展的大小,可以根据需要调整
MAXSIZE UNLIMITED; -- 设置最大空间大小不限制
第四步:客户端连接与字符集问题
在尝试通过PL/SQL和sqlPlus连接数据库时,我遇到了连接问题。详情如下:
使用 sqlPlus hr/123456 命令登录,新建了一个t_user_test 测试表,新增了2条数据,然后去查询,发现乱码了。
sql
INSERT INTO t_user_test VALUES(1, '张三');
INSERT INTO t_user_test VALUES(2, '李四');
SELECT * FROM t_user_test;
通过 sqlPlus 查询乱码,那通过本地客户端 PL/SQL 会怎样呢?首先是连接数据库,刚开始一直连不上,问了DBA大佬,数据库地址是XXX.XXX.XXX.XXX:1521/SERVICE_NAMES,SERVICE_NAMES 的查询方法如下,得出来 orcl11g.us.oracle.com,终于连上了。
查询结果:
看起来仅通过 sqlPlus 查询乱码,使用PL/SQL 连接查看都正常,又问了DBA大佬,说是字符集问题,接着开始设置字符集,期间试过下面三种方法但都不好使。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK、
export NLS_LANG=ZHS16GBK、
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK",
最后通过下面的方法解决了乱码问题,目前通过 PL/SQL 和 SqlPlus 查询正常,基本大功告成了。
bash
vim /etc/profile
# 在最后面输入下面一行
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
# 最后执行source 命令使生效
source /etc/profile
第五步:重启测试与问题排查
这一步是重启测试,在重启系统后,我发现无法通过 sqlPlus 以hr 用户身份登录,使用 dba 身份免密登录时提示实例不存在。但奇怪的是,通过本地 PL/SQL 客户端却能正常连接并查询。通过重启服务器并监控连接状态,我排除了连接错误的可能性,并最终确定是Oracle 实例在重启后未能正确启动。
最后怀疑是自启动问题,去掉oracle 自启动后,重启机器,然后开始手动重启 oracle.
好了,启动完成,SqlPlus 也能正常登录了。
但问题又来了,本地的 PL/SQL 又连不上了,提示了下面的错误,没有监听器。对于第一次安装和使用oracle 来说,确实有点崩溃了,这是在修水管吗,这点修好那点坏?
好在oracle 社区群体比较庞大,很快找到了问题解决方法,操作和截图如下:
bash
lsnrctl status # 查看监听器状态
lsnrctl start # 开启监听器,如果重启后,不开启监听器,那么客户端就连接不上
当然,这里也重新配置了 tnsnames.ora 和 listener.ora,内容如下:
bash
1、listener.ora内容:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=orcl11g)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
(GLOBAL_DBNAME = orcl11g)
)
)
LISTENER =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=server01)(PORT=1521))
)
2、tnsnames.ora内容
orcl=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TPC)(HOST=server01)(PORT=1521)(KEY=EXTPROC1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=orcl11g.us.oracle.com)
)
)
orcl11g=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TPC)(HOST=server01)(PORT=1521)(KEY=EXTPROC1521))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=orcl11g)
)
)
其中,server01通过 hostname 命令得出,也可通过命令 vim /etc/hostname 修改。
第六步:数据导入与权限问题
在尝试使用hr用户导入表结构时,我遇到了权限不足的错误。在改用system用户后,导入操作顺利完成。看来,在进行数据库操作时,务必注意用户的权限设置。
sql
imp system/123456 file=/tmp/importData/backup.dmp fromuser=ca touser=hr
如果要使用 hr 用户导入,那么需要给 hr 用户赋权限:
sql
grant imp_full_database to hr;
至此,Linux 环境下 Oracle 11g 的离线安装与配置工作基本完成。这次经历不仅让我掌握了Oracle数据库在Linux环境下的安装与配置方法,还让我对数据库的权限管理、字符集设置等有了更深刻的理解。