在成功体验了 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所需的所有安装包及依赖库,确保安装过程中不会因缺少资源而中断。

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 用户及其对应的表空间,为后续操作打好了基础。

-- 使用 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条数据,然后去查询,发现乱码了。

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 查询正常,基本大功告成了。

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 社区群体比较庞大,很快找到了问题解决方法,操作和截图如下:

lsnrctl status # 查看监听器状态
lsnrctl start  # 开启监听器,如果重启后,不开启监听器,那么客户端就连接不上

当然,这里也重新配置了 tnsnames.ora 和 listener.ora,内容如下:

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用户后,导入操作顺利完成。看来,在进行数据库操作时,务必注意用户的权限设置。

imp system/123456 file=/tmp/importData/backup.dmp fromuser=ca touser=hr

如果要使用 hr 用户导入,那么需要给 hr 用户赋权限:

grant imp_full_database to hr;

        至此,Linux 环境下 Oracle 11g 的离线安装与配置工作基本完成。这次经历不仅让我掌握了Oracle数据库在Linux环境下的安装与配置方法,还让我对数据库的权限管理、字符集设置等有了更深刻的理解。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐