Linux环境下Oracle 11g的离线安装与配置历程

在成功体验了 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环境下的安装与配置方法,还让我对数据库的权限管理、字符集设置等有了更深刻的理解。

相关推荐
律宏阔6 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔6 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴6 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
oradh6 小时前
Oracle 执行计划的阅读方法(二叉树结构来理解和阅读)
数据库·oracle·执行计划的阅读方法
乱码三千6 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei376 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei376 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei376 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh6 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW6 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux