[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]
好久没更新文章了,不知道各位道友有没有想我呀,欢迎在评论留言!
0x00 前言简述
描述:为了对得起作者UP主公众号【全栈工程师修炼指南】中的【全栈】二字,作者选择一门自己工作中常常使用到,以及全球最流行的关系型数据库 Oracle 来进行学习,并记录学习过程,以供后续的自己复习回顾和帮助各位看友快速上手,从入门到高新,请各位看友一定要关注、订阅【#Oracle学习之路】专栏。
前面,我们讲解了 Oracle Database 11g 在 Windows Server 上的安装部署,随着企业的信息化发展,越来越多的企业开始选择使用 Linux 服务器操作为数据库服务器,因为其比 Windows Server 性能更好,安全性更高; 另外随着国家对各事业单位、国有企业有国产化提出要求,越来越多的企业便开始选择使用国产操作系统,所以,接下来,我们开始学习实践 Oracle Database 11g 在国产 Linux 服务器 (最新银河麒麟 KylinOS V10 SP3)上的安装部署,并且简单使用数据库等操作。
此文是作者耗费一定时间进行实践总结得出,对各位正在进行国产化替代看友有所帮助,也欢迎各位看友关注、点赞、收藏、评论和转发,谢谢!
0x01 安装部署
前置依赖
环境说明:
操作系统:Kylin Linux Advanced Server V10 (Halberd) UKUI GUI 内核版本:4.19.90-89.16.v2401.ky10.x86_64 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production 数据库:itgeekdb 字符集:ZHS16GBK 数据块大小:8K
要对 Kylin-Server-V10 服务器初始化安装及其安全加固可参考如下文章:
介绍安装:企业实践 | 国产操作系统之光? 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装篇 安全加固:网安等保 | 主机安全之KylinOS银河麒麟服务器配置优化与安全加固基线文档脚本分享 要对 Oracle Database 11g Enterprise 安装包进行下载可参考如下文章:
此处值得注意是,作者使用的是银河麒麟操作系统,其中系统ISO镜像为 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso
, 最新版本的麒麟下载地址可参考上面文章链接进行下载。
在 VMware 或者其他虚拟化平台上安装此系统时有如下更改,可能会影响后续实践安装操作,这里作者简单的说明如下:
虚拟机设置中,启用 UEFI 模式,此处以 VMware Workstation 16.0.2
为例。

安装系统时,自定义磁盘分区,需要创建的swap分区,此处作者创建了 4G 的 swap 分区,生产环境请根据需求划分。
安装系统时,软件选择中选择带 UKUI GUI 的服务器,并且勾选 开发工具
、系统工具
等附加软件。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
安装成功后进入到桌面系统,输入root及其账号密码,即可进入桌面系统,如下图所示:
系统配置
配置网卡自启动(已配置时请跳过)
# 温馨提示:请根据实际情况进行替换网卡名称 ifcfg-ens33
sed -i -e '/^ONBOOT/c ONBOOT=yes' /etc/sysconfig/network-scripts/ifcfg-ens33复制
配置主机名
hostnamectl set-hostname --static db11g
tee -a /etc/hosts <<'EOF'
10.20.172.160 db11g.weiyigeek db11g
EOF复制
配置远程登录(已配置时请跳过)
# 允许 root 登录以及允许 X11 进行图形化转发,后续使用 MobaXterm 进行访问服务器,已经图形化方式安装 Oracle 11g。
sed -i -e '/^#PermitRootLogin/c PermitRootLogin yes' -e '/^#X11Forwarding/c X11Forwarding yes' /etc/ssh/sshd_config
# 重启服务
systemctl restart sshd复制
配置禁用selinux
# 临时
setenforce 0
setenforce Permissive
# 永久
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config复制
配置禁用防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service复制
配置swap分区(若安装系统时已创建可跳过此步骤,否则必须执行下述操作)
# 这里创建4G的swap空间,此处作者测试主机是 4G 内存
number=$(echo "4*1024*1024"|bc)
dd if=/dev/zero of=/swapfile bs=1024 count=${number}
chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
# 开启挂载
sudo tee -a /etc/fstab <<'EOF'
/swapfile swap swap default 0 0
EOF
sudo swapon --show && sudo free -h
# total used free shared buff/cache available
# Mem: 3.4Gi 1.0Gi 106Mi 23Mi 2.5Gi 2.4Gi
# Swap: 4.0Gi 0B 4.0Gi复制
安装软件包
# 方式1.最小版本、安装 Oracle 数据库所需的软件包! (可选)
# 光驱挂载
mkdir ./backup;
mv /etc/yum.repos.d/* ./backup
echo "[ISO]" > /etc/yum.repos.d/cdrom.repo
echo "name=Kylin-Server 2403 DVD" >> /etc/yum.repos.d/cdrom.repo
echo "baseurl=file:///mnt/iso" >> /etc/yum.repos.d/cdrom.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/cdrom.repo
echo "enabled=1" >> /etc/yum.repos.d/cdrom.repo
# 或者
tee /etc/yum.repos.d/cdrom.repo <<'EOF'
[ISO]
name=Oracle Linux 9.x DVD
baseurl=file:///mnt/iso/AppStream/
gpgcheck=0
enabled=1
EOF
mount /dev/cdrom /mnt/iso
# 或者 iso 镜像文件挂载
# mount -o loop /opt/Kylin-Server-V10-SP3-2403-Release-20240426-x86_64.iso /mnt/cdrom
yum update
# Kylin-Server 2403 DVD 30 MB/s | 7.0 MB 00:00
# 上次元数据过期检查:0:00:01 前,执行于 2024年10月24日 星期四 16时43分17秒。
# 依赖关系解决。
# 无需任何处理。
# 完毕!
# 方式2.有外网的情况下可直接安装(推荐)
yum update
yum install gcc ksh gcc-c++ make automake autoconf sysstat numactl ftp dos2unix jq unzip -y
# 根据需要列出了以下软件包,包括其中一些软件包的32位版本,许多软件包应该已经安装。
yum install binutils -y
yum install compat-libstdc++-33 -y
yum install libnsl libXp libXpm -y
yum install glibc -y
yum install glibc-headers -y
yum install glibc-devel -y
yum install libgcc -y
yum install libstdc++ -y
yum install libstdc++-devel -y
yum install libaio -y
yum install libaio-devel -y
yum install elfutils-libelf -y
yum install elfutils-libelf-devel -y
yum install elfutils-* -y
yum install libXext -y
yum install libXtst -y
yum install libX11 -y
yum install libXau -y
yum install libxcb -y
yum install libXi -y
yum install unixODBC -y
yum install unixODBC-devel -y
yum install zlib-devel -y
yum install libnsl2-devel -y复制
随着时间推移镜像源中软件包的版本可能太新时,此时缺失或不兼容最新版本的依赖包请访问此网址下载旧版本安装:http://rpm.pbone.net/
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
配置修改 tmp 目录大小(默认会使用)
# 临时生效
mount -o remount,size=5G tmpfs /tmp
# 开机生效(永久)
echo "mount -o remount,size=5G tmpfs /tmp" >> /etc/rc.local复制
创建用户与组
# 通常创建三个组即可
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
#groupadd -g 54324 backupdba
#groupadd -g 54325 dgdba
#groupadd -g 54326 kmdba
#groupadd -g 54327 asmdba
#groupadd -g 54328 asmoper
#groupadd -g 54329 asmadmin
# 创建一个 oracle 用户,主组为 oinstall 附加组为 dba,oper
useradd -u 54321 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash oracle
# 密码设置
echo "Weiyigeek.top" | passwd oracle --stdin
# passwd:所有的身份验证令牌已经成功更新。复制
创建安装路径
mkdir -vp /oracle/app
chmod -R 775 /oracle/
# 权限设置
chown -R oracle:oinstall /oracle
# chown -R oracle:oinstall /swapfile复制
配置限制参数
tee /etc/security/limits.d/oracle.conf <<'EOF'
oracle soft nofile 2048
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
EOF复制
配置内核参数:
tee /etc/sysctl.d/98-oracle.conf <<'EOF'
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.ip_local_port_range = 9000 65500
vm.swappiness = 1
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
EOF
/sbin/sysctl -p
# Or
/sbin/sysctl -p /etc/sysctl.d/98-oracle.conf复制
配置PAM登录限制
tee -a /etc/pam.d/login <<'EOF'
session required /lib/security/pam_limits.so
session required pam_limits.so
EOF复制
配置Java环境变量
mv /usr/bin/java{,.bak}
tar -zxvf jdk-8u211-linux-x64.tar.gz -C /usr/local/
ln -s /usr/local/jdk1.8.0_211/bin/java /usr/bin/java
# 注意目录要换成自己解压的jdk 目录
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH复制
温馨提示:关注《全栈工程师修炼指南》公众号回复《2024110501
》获取 Java JDK 8u211
下载链接。
配置环境变量
# 切换到 oracle用户
su - oracle
# 配置环境变量
tee -a ~/.bash_profile <<'EOF'
export LANG=en_US.UTF-8
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0.1/db_1
export ORACLE_HOSTNAME=db11g
export ORACLE_SID=itgeekdb
export ORACLE_UNQNAME=itgeekdb
export DATA_DIR=$ORACLE_BASE/oradata
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/lib64
export LS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export THREADS_FLAG=native
export LIBRARY_PATH=/lib:/usr/lib:/usr/lib64:/usr/local/lib
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:${ORACLE_HOME}/jlib:${ORACLE_HOME}/rdbms/jlib:${ORACLE_HOME}/network/jlib
export PATH=.:${JAVA_HOME}/bin:${ORACLE_HOME}/bin:$PATH
export TEMP=/tmp
export TMPDIR=/tmp
# stty erase ^h
EOF
# 环境变量生效
source ~/.bash_profile复制
其他依赖环境配置
# 1.由于glibc升级到2.28版本之后不提供 /usr/lib64/libpthread_nonshared.a,需要手动上传复制该文件到 /usr/lib64/ 目录中,注意切换到 root 用户
cp libpthread_nonshared.a /usr/lib64/libpthread_nonshared.a复制
温馨提示:关注《全栈工程师修炼指南》公众号回复《2024110502
》获取 Oracle 11g
以及 libpthread_nonshared.a
静态库下载链接。
温馨提示:操作完上述操作后,建议重启系统生效。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!安装步骤
Step 1.将下载好的Oracle Databse 11gc
安装包上传到服务器中, 并解压到 home/oracle 目录中。
cd /home/oracle
unzip -d /home/oracle -q Oracle11.2.0.1.0-01_1of2.zip
unzip -d /home/oracle -q Oracle11.2.0.1.0-01_2of2.zip
# 替换oracle安装包中的unzip命令,否则会报 unzip 使用说明错误:
cp ./database/install/unzip{,.bak}
cp /usr/bin/unzip ./database/install/unzip
# 修改文件权限,防止安装时莫名其妙的权限问题
chown -R oracle:oinstall /home/oracle复制
Step 2.除非您是从控制台工作,或使用SSH隧道,否则请以root身份登录并发出以下命令, 作者这里使有 MobaXterm
后续进行X11图形转发。
# 使用 oracle 用户登录
ssh oracle@10.20.172.160
# 此命令将授予任何本地用户对你的X屏幕的访问权限,此处作者客户端IP为10.20.172.106为例
xhost +10.20.172.106
# 10.20.172.106 being added to access control list
# 注意,此处是客户端IP,不是服务器IP,切记!
export DISPLAY=10.20.172.106:0.0
# 需要配置X11远程access为full,否则会报如下错误:
# Authorization required, but no authorization protocol specified
# Can't connect to X11 window server using '10.20.172.106:0.0' as the value of the DISPLAY variable.复制

本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
Step 3.在数据库目录中发出以下命令,启动Oracle通用安装程序(OUI), 若提示Oracle可能不适配此系统时,直接继续即可。
# 运行安装程序
$ ./database/runInstaller
# Starting Oracle Universal Installer...
# Checking Temp space: must be greater than 120 MB. Actual 1049 MB Passed
# Checking swap space: must be greater than 150 MB. Actual 4031 MB Passed
# Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
# Preparing to launch Oracle Universal Installer from /tmp/OraInstall2024-11-05_10-57-00AM. Please wait ...
# 安装日志
ls /tmp/OraInstall2024-11-05_10-57-00AM/复制
Step 4.取消勾选I wish to receive security update via My Oracle Support
,点击OK
继续,再选择创建和配置数据库
。
Step 5.选择安装服务器类型
以及单实例数据库安装
,作者后续也介绍RAC集群安装配置敬请持续关注,点击下一步
。
Step 6.勾选高级安装类型
配置更多参数,选择默认语言即可,然后选择企业版本类型
。
Step 7.配置数据库安装路径
、数据库清单路径
,默认是从我们设置环境变量中自动取的,如需修改请自行修改即可,点击下一步。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
Step 8.通常选择通用事务处理(OLTP),而不是数据仓库(OLAP),事务配置数据库名称
、数据库SID
,并设置字符集为ZHS16GBK
点击下一步。
Step 9.配置数据库存储路径
,根据我们前面的环境变量进行自动配置的,注意由于这里是测试我们可以暂不启动归档
,生产环境通常是启动此选项的。
Step 10.配置SYS/SYSTEM/PDBADMIN
等数据库管理员密码
以及确认密码
如有警告通知点击 Yes 即可,然后选择操作权限组,可根据自身环境进行选择,也可与作者配置一样,这里点击下一步。
Step 11.进入到预安装依赖检查,点击执行检查
进行依赖检查,如果存在警告信息请根据提示解决即可,此处由于我已经安装对应包的最新版本,所以提示指定版本的包未安装,点击忽略所有警告
即可,你也可以点击 Fix & Check Again
获取修复脚本。
Step 12.再次核对配置无误后点击Install
进行Oracle Database 11g
数据库的安装,建议再安装前保存安装响应文件,以便于后续静默安装。
Step 13.点击安装之后,将显示如下图所示进度条,安装过程需要等待一段时间,若有报错,请参考文章末尾的入坑出坑章节进行解决。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
Step 14.在安装到79%之后,将显示如下图所示的需要root用户执行的配置脚本界面,分别复制到root权限窗口中并执行,然后关闭窗口。
[root@db11g ~]# /oracle/oraInventory/orainstRoot.sh
[root@db11g ~]# /oracle/app/oracle/product/11.2.0.1/db_1/root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /oracle/app/oracle/product/11.2.0.1/db_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
The file "dbhome" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]: y
Copying dbhome to /usr/local/bin ...
The file "oraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]: y
Copying oraenv to /usr/local/bin ...
The file "coraenv" already exists in /usr/local/bin. Overwrite it? (y/n)
[n]: y复制
Step 15.确认没有错误后在安装完成后,点击Close即可关闭安装界面,再使用如下命令查看监听。
# 查看监听
$ netstat -ano | egrep "1521|5500" | grep "LISTEN"
tcp6 0 0 :::1521 :::* LISTEN off (0.00/0/0)
unix 2 [ ACC ] STREAM LISTENING 298000 /var/tmp/.oracle/sEXTPROC1521
# 查看oracle进程
$ ps aux | grep "oracle"
# 使用 tnsping 连接测试
$ tnsping itgeekdb
# TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 05-NOV-2024 15:49:56
# Copyright (c) 1997, 2009, Oracle. All rights reserved.
# Used parameter files:/oracle/app/oracle/product/11.2.0.1/db_1/network/admin/sqlnet.ora
# Used TNSNAMES adapter to resolve the alias
# Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db11g)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = itgeekdb)))
# OK (0 msec) # 表示连接可达复制
Step 16.最后,我们可以通过如下命令登录到Oracle数据库中查看当前状态。
# 在宿主机中以sysdba身份登录到Oracle数据库中:
$ sqlplus "/as sysdba"
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
# 查看数据库字符集
SQL> SELECT userenv('language') FROM dual;
# USERENV('LANGUAGE')
# ----------------------------------------------------
# AMERICAN_AMERICA.ZHS16GBK
# 查看实例名称及其运行状态:
SQL> SELECT instance_name,status FROM v$instance;
# INSTANCE_NAME STATUS
# ---------------- ------------
# itgeekdb OPEN # 表示正常运行
# 查看数据库的版本信息:
SQL> SELECT * FROM v$version;
# BANNER
# --------------------------------------------------------------------------------
# Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
# PL/SQL Release 11.2.0.1.0 - Production
# CORE 11.2.0.1.0 Production
# TNS for Linux: Version 11.2.0.1.0 - Production
# NLSRTL Version 11.2.0.1.0 - Production
# 查看数据库的启动时间和当前时间:
SELECT STARTUP_TIME AS startup_time, sysdate FROM v$instance;
# STARTUP_TIME SYSDATE
# ------------------- -------------------
# 2024-11-05 15:44:24 2024-11-05 17:27:02
# 查看数据库的活动状态和会话数:
SQL> SELECT status, COUNT(*) FROM v$session WHERE username IS NOT NULL GROUP BY status;
# STATUS COUNT(*)
# -------- ----------
# ACTIVE 3
# INACTIVE 6复制
至此,在国产Linux上成功安装了 Oracle11g 数据库,后续我们将介绍 Oracle11g 数据库基础操作。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
0x02 基础操作
描述:在完成Oracle11g数据库安装后,我们还需要对数据库进行一系列的基础操作。
配置 sqlplus 工具相关设置
cd $ORACLE_HOME/sqlplus/admin
tee -a glogin.sql <<'EOF'
define _editor=vi
set linesize 100
set pagesize 9999
set sqlprompt "_user'@'_connect_identifier>"
EOF复制
配置Oracle数据库开机自启动
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!# 步骤01
su - oracle
sed -i '/^itgeekdb/ s/:N/:Y/' /etc/oratab
# itgeekdb:/oracle/app/oracle/product/11.2.0.1/db_1:N
# 步骤02
su - root
chmox +x /etc/rc.d/rc.local
tee -a /etc/rc.d/rc.local <<'EOF'
su - oracle -lc "/oracle/app/oracle/product/11.2.0.1/db_1/bin/lsnrctl start"
su - oracle -c "/oracle/app/oracle/product/11.2.0.1/db_1/bin/dbstart"
EOF
# 若要使用命令停止数据库,则执行如下命令:
su - oracle -c "/oracle/app/oracle/product/11.2.0.1/db_1/bin/dbshut"
su - oracle -lc "/oracle/app/oracle/product/11.2.0.1/db_1/bin/lsnrctl stop复制
手动启停数据库
停止
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!# 以sysdba身份登录数据库
sqlplus "/as sysdba"
# 关闭数据库
SQL> shutdown immediate;
# Database closed.
# Database dismounted.
# ORACLE instance shut down.
SQL> exit
# Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
# 停止监听
lsnrctl stop
# LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26-OCT-2024 22:25:45
# Copyright (c) 1991, 2016, Oracle. All rights reserved.
# Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
# The command completed successfully复制
启动
# 以sysdba身份登录数据库
sqlplus "/as sysdba"
# 启动数据库实例
SQL> startup;
# ORACLE instance started.
# ORACLE instance started.
# Total System Global Area 1202556928 bytes
# Fixed Size 2212816 bytes
# Variable Size 754977840 bytes
# Database Buffers 436207616 bytes
# Redo Buffers 9158656 bytes
# Database mounted.
# Database opened.
SQL> exit
# 启动监听
lsnrctl start
# Listening Endpoints Summary...
# (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
# (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db11g.weiyigeek)(PORT=1521)))
# The listener supports no services
# The command completed successfully复制
最后,再使用客户端进行验证,是否可以正常连接数据库,以及读取数据库中存储的数据。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!数据库日志路径
# 查看数据库的日志文件:
SELECT NAME,VALUE FROM v$diag_info;
# INST_ID NAME VALUE CON_ID
# ---------- --------------------------
# 1 ADR Home /oracle/app/diag/rdbms/itgeekdb/itgeekdb 0
# 1 Diag Trace /oracle/app/diag/rdbms/itgeekdb/itgeekdb/trace
# 1 Diag Alert /oracle/app/diag/rdbms/itgeekdb/itgeekdb/alert
# 1 Diag Incident /oracle/app/diag/rdbms/itgeekdb/itgeekdb/incident复制
然后,在宿主机中上面SQL语句获取到的日志文件路径,查看Oracle日志警告文件,排查错误时非常实用。
$ tail -f /oracle/app/diag/rdbms/itgeekdb/itgeekdb/trace/alert_itgeekdb.log
# QMNC started with pid=20, OS id=98114
# Completed: ALTER DATABASE OPEN
# Wed Nov 06 08:06:55 2024
# db_recovery_file_dest_size of 3882 MB is 0.00% used. This is a
# user-specified limit on the amount of space that will be used by this
# database for recovery-related files, and does not reflect the amount of
# space available in the underlying filesystem or ASM diskgroup.
# Starting background process CJQ0
# Wed Nov 06 08:06:58 2024
# CJQ0 started with pid=21, OS id=98132复制
数据库基础操作
Oracle 用户登录 TNS 服务名解析配置
tee tnsnames.ora <<'EOF'
itgeekdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db11g)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = itgeekdb)
)
)
EOF复制
登录与用户切换
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!# 超级管理员远程登录
SQL>conn sys/weiyigeek@10.20.172.160:1521/itgeekdb as sysdba
# 创建用户
CREATE USER weiyigeek IDENTIFIED BY weiyigeektop;
# User created.
# 授权用户远程连接及其资源
grant connect,resource to weiyigeek;
# Grant succeeded.
# 切换用户
# 如,超级管理员
# 语法:conn[ect] [{用户名[/密码][@连接字符串]|/|代理串} [AS {SYSOPER|SYSDBA|SYSASM}] [edition=value]]
SQL>conn sys/weiyigeek as sysdba
# 如,普通用户
SQL>conn weiyigeek/weiyigeektop
# Connected.
# 或者
SQL> connect / as sysdba
# 锁定用户
alter user weiyigeek account lock;
SYS@itgeekdb>conn weiyigeek/weiyigeektopp
# ERROR:
# ORA-28000: the account is locked
# 解锁用户
alter user weiyigeek account unlock;复制
系统命令执行描述:在使用sqlplus 登录数据库后,可以使用!+系统命令
格式进行命令的执行,例如:
SYS@itgeekdb>!ls /oracle/app/oradata/itgeekdb
control01.ctl redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf复制
表空间创建与删除
# 创建表空间,注意低权限用户无法创建表空间
CREATE TABLESPACE itgeek DATAFILE '/oracle/app/oradata/itgeekdb/itgeek.dbf' SIZE 10m;
# Tablespace created.
# 授权用户使用表空间
alter user weiyigeek default tablespace itgeek;
grant unlimited tablespace to weiyigeek;
# 删除以及同时删除表空间包含的所有对象和数据文件。
DROP TABLESPACE itgeek INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
# 查看当前数据库中存在的表空间:
SELECT name FROM v$datafile;
# NAME
#------------------------
# /oracle/app/oradata/itgeekdb/system01.dbf
# /oracle/app/oradata/itgeekdb/sysaux01.dbf
# /oracle/app/oradata/itgeekdb/undotbs01.dbf
# /oracle/app/oradata/itgeekdb/users01.dbf
# /oracle/app/oradata/itgeekdb/itgeek.dbf复制
数据表创建
-- 切换用户
connect weiyigeek/weiyigeektop
-- 创建数据表
CREATE TABLE "TEST_PDB" (id number(10) primary key,name varchar2(50));
-- 查看表结构
desc TEST_PDB
-- Name Null? Type
-- ----------------------------------------------------- -------- ------------------------------------
-- ID NOT NULL NUMBER(10)
-- NAME VARCHAR2(50)复制
数据插入
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!INSERT INTO "TEST_PDB" VALUES(1,'weiyigeek');
INSERT INTO "TEST_PDB" VALUES(2,'weiyigeek.top');
INSERT INTO "TEST_PDB" VALUES(3,' 公众号:全栈工程师修炼指南 ');复制
数据导入导出
# 本地导入
imp 用户名/密码@实例名 file='文件地址' full=y ignore=y
# 远程导入其他数据库:
imp 用户名/密码@ip:端口/实例名 file='文件地址' full=y ignore=y
# 导出指定表
exp 用户名/密码@ip:端口/实例名 file='文件地址' tables=table1
# 导出多张表
exp 用户名/密码@ip:端口/实例名 file='文件地址' tables=table1,table2;
# 导出所有表
exp weiyigeek/weiyigeektop@10.20.172.160/itgeekdb file='/tmp/weiyigeek.dmp'
ls /tmp/weiyigeek.dmp复制
数据查询通常,我们会使用 sqlplus 工具进行 Oracle 11g 数据库中相关数据的查询,例如:
# 登录数据库
sqlplus weiyigeek/weiyigeektop@10.20.172.160:1521/itgeekdb
# 查询数据
select * from TEST_PDB;
ID NAME
---------- --------------------------------------------------
1 weiyigeek
2 weiyigeek.top
3 公众号:全栈工程师修炼指南复制
此外,我们还可使用 Navicate 工具进行Oracle 11g 数据库的连接和操作,常规连接配置如下, 这里需特别注意字符集的配置为(客户端字符集为 ZHS16GBK
,编码为 65001 (UTF-8)
),否则可能会出现中文乱码问题。
查看创建的触发器
SELECT trigger_name, trigger_type, triggering_event, trigger_body
FROM user_triggers
WHERE trigger_name = 'PDB_AUTO_STARTUP';复制
卸载清理数据库
# 切换到oracle用户
su - oralce
# 数据库卸载引导
cd $ORACLE_HOME/bin
./dbca
# 删除监听引导
./netca
# 删除数据库引导
cd $ORACLE_HOME/deinstall/
./deinstall
# Specify the list of database names that are configured in this Oracle home []: 回车
# Do you want to continue (y - yes, n - no)? [n]: y复制
0x03 入坑出坑
1.通过 MobaXterm 安装 Oracle 11g 时报 You must fulfill these requirements before
错误信息:在 Linux 中安装 Oracle12c 时安装界面弹窗不正常弹出。
./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 500 MB. Actual 47064 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4095 MB Passed
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed <<<<
Some requirement checks failed. You must fulfill these requirements before continuing with the installation,复制
解决办法:使用 root 用户执行 xhost+
操作,直接用 oracle
用户登录(注意:不是通过root切换),然后执行export DISPLAY=IP地址:0.0
命令,然后执行 ./runInstaller
即可。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!# 执行 /usr/bin/xdpyinfo 发现 No such file or directory,于是安装 xdpyinfo 工具
yum install xdpyinfo复制
2.安装 Oracle 11g 时报 unzip 命令解压失败错误
错误信息: 在 Linux 中运行下述工具安装时 Oracle 11g 时会自动解压包中的相关依赖软件,在银河麒麟系统中会有如下报错。
[oracle@db11g database]$ ./runInstaller
# ......
# UnZip 5.52 of 28 February 2005, by Info-ZIP. Maintained by C. Spieler. Send
# bug reports using http://www.info-zip.org/zip-bug.html; see README for details.
# Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]复制
解决办法:
mv ./database/install/unzip{,.bak}
cp /usr/bin/unzip ./database/install/unzip复制
3.安装 Oracle 11g 时报 There was an error trying to initialize the HPI library. 错误
错误信息:
./database/runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 1439 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4031 MB Passed
Checking monitor: must be configured to display at least 256 colors. Actual 16777216 Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2024-11-05_10-52-12AM. Please wait ...
There was an error trying to initialize the HPI library.
Please check your installation, HotSpot does not work correctly
when installed in the JDK 1.2 Linux Production Release, or
with any JDK 1.1.x release.
Could not create the Java virtual machine.复制
解决办法:
1.首先正确配置 Java 环境,按照作者前面的操作进行配置,然后执行 java -version
命令进行检查。2.然后检查系统中是否未安装 libnsl 库,若没有安装请执行 yum install libnsl -y
命令进行安装。
4.安装 Oracle 11g 报错 [INS-10012] no oraInstaller in java.library.path
错误信息:
# 界面提示错误
[INS-10012] Setup driver initialization failed. - no oraInstaller in java.library.path
# 更详细错误信息
$ more /tmp/OraInstall2024-10-25_08-53-11AM/oraInstall2024-10-25_08-53-11AM.err
java.lang.UnsatisfiedLinkError: /tmp/OraInstall2024-10-25_08-53-11AM/oui/lib/linux64/liboraInstaller.so: libnsl.so.1: cannot open shared object file: No such file or directory复制
解决办法: 安装 libnsl 库
yum install libnsl.i686 libnsl.x86_64
复制
5.安装 Oracle 11g 报错 usr/bin/ld: cannot find usr/lib64/libpthread_nonshared.a
错误信息:
# 界面提示错误
Error in invoking target 'client_sharedlib' of makefile '/oracle/app/oracle/product/11.2.0.1/dbhome_1/rdbms/lib/ins_rdbms.mk'. See '/oracle/app/oraInventory/logs/installActions2024-10-25_09-01-34AM.log' for details.
# 更详细错误信息
INFO: /usr/bin/ld: cannot find /usr/lib64/libpthread_nonshared.a
INFO: genclntsh: Failed to link libclntshcore.so.12.1
INFO: make: *** [/oracle/app/oracle/product/11.2.0.1/dbhome_1/rdbms/lib/ins_rdbms.mk:56: client_sharedlib] Error 1复制
解决办法:由于glibc升级到2.28版本之后不提供 /usr/lib64/libpthread_nonshared.a
静态链接库,所以需要手动解决。
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!cp libpthread_nonshared.a /usr/lib64/
复制
6.安装 Oracle 11g 在依赖库检查时报 OS kernel parameter "semmni" 参数值未设置正确
错误信息:
This is a prerequisite condition to test whether the OS kernel parameter "semmni" is properly set. (more details)
Expected Value
: 128
Actual Value
: 0复制
解决办法:
# 方式1
tee -a /etc/sysctl.conf <<'EOF'
kernel.sem = 250 32000 100 128
EOF
sysctl -p
# 方式2.点击界面`Fix & Check Agent`获取修复依赖脚本,注意使用root用户执行。复制
温馨提示:作者在实践中发现银河麒麟系统即使设置了 semmni
值为 128 依然会报错,然后作者直接忽略该错误继续安装,作者猜想是由于银河麒麟(Kylin)系统对内核的某些参数做了阉割。
7.安装 Oracle 11gR2 中报 Error in invoking target 'links proc gen_pcscfg' of makefile 错误
错误信息:
# 完整错误信息
INFO: Linking /oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/proc
INFO: /usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/lib//libnnz11.so: .dynsym local symbol at index 128 (>= sh_info of 15)
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/lib//libnnz11.so: .dynsym local symbol at index 837 (>= sh_info of 15)
/usr/bin/ld: /usr/lib64/libaio.so.1: undefined reference to `__stack_chk_fail@GLIBC_2.4'
INFO: collect2: error: ld returned 1 exit status
INFO: /bin/chmod: cannot access '/oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/proc': No such file or directory
INFO: make[1]: *** [/oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/ins_precomp.mk:118: /oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/proc] Error 1
INFO: make[1]: Leaving directory '/oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib'
INFO: make: *** [/oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/ins_precomp.mk:28: proc] Error 2
INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target links proc gen_pcscfg' of makefile /oracle/app/oracle/product/11.2.0.1/db_1/precomp/lib/ins_precomp.mk'.复制
解决办法:
$ mkdir ~/backup && mv $ORACLE_HOME/lib/stubs/* ~/backup
$ cp /oracle/app/oracle/product/11.2.0.1/db_1/rdbms/lib/env_rdbms.mk{,.orig}
# 修改 env_rdbms.mk 中指定行及其参数为下述内容
$ vim $ORACLE_HOME/rdbms/lib/env_rdbms.mk
174 LINKTTLIBS=$(LLIBCLNTSH) $(ORACLETTLIBS) $(LINKLDLIBS) -lons
247 LINK=$(FORT_CMD) $(PURECMDS) gcc $(LDFLAGS) $(COMPSOBJS) -Wl,--no-as-needed
248 LINK32=$(FORT_CMD) $(PURECMDS) gcc $(LDFLAGS32) $(COMPSOBJS) -Wl,--no-as-needed
2779 TG4PWD_LINKLINE= $(LINK) $(OPT) $(TG4PWDMAI) $(LLIBTHREAD) $(LLIBCLNTSH) $(LINKLDLIBS) -lnnz11复制
修改完成,点击Retry
继续安装。
参考来源: http://www.oracle-base.com/articles/12c/oracle-db-12cr1-installation-on-oracle-linux-7.php
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!8.安装 Oracle 11gR2 中报 Error in invoking target 'install' of makefile 错误
错误信息:
# 完整报错信息:
INFO: /usr/bin/ld: warning: libstdc++.so.5, needed by /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib//libsc_fa.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib//libsc_fa.so: undefined reference to `__gxx_personality_v0@CXXABI_1.2'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `std::ios_base::Init::~Init()@GLIBCPP_3.2'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libsc_ch.so: undefi
INFO: ned reference to `__gxx_personality_v0'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `std::ios_base::Init::Init()@GLIBCPP_3.2'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `operator delete(void*)@GLIBCPP_3.2'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `vtable for __cxxabiv1::__si_class_type_info@GLIBCPP_3.2'
/usr/bin/ld: /oracle/app/oracle/pro
INFO: duct/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `__cxa_pure_virtual@CXXABI_1.2'
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/libwv_core.so: undefined reference to `vtable for __cxxabiv1::__class_type_info@GLIBCPP_3.2'
INFO: collect2: error: ld returned 1 exit status
INFO: make: *** [/oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/ins_ctx.mk:11: ctxhx] Error 1
INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'install' of makefile '/oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib/ins_ctx.mk'.
# 更多错误信息,可执行如下命令查看详细错误信息:
tail -15 $ORACLE_HOME/install/make.log复制
解决办法:
# 软连接动态链接库
ln -s /oracle/app/oracle/product/11.2.0.1/db_1/ctx/lib//libsc_fa.so /usr/lib64/libstdc++.so.5
ln -s /oracle/app/oracle/product/11.2.0.1/db_1/lib/libclntsh.so.11.1 /usr/lib
# 设置make编译时链接参数
rm -rf $ORACLE_HOME/lib/stubs/*
cp $ORACLE_HOME/ctx/lib/env_ctx.mk $ORACLE_HOME/ctx/lib/env_ctx.mk.orig
152 LINK=$(LDCCOM) --Wl,--no-as-needed
153 LINKCC=$(LDCCOMCC)复制
建议在安装完后,执行如下命令进行重新链接。
dbshut $ORACLE_HOME
cd $ORACLE_HOME/bin
./relink all
# Following line should return no errors.
grep -i err $ORACLE_HOME/install/relink.log
dbstart $ORACLE_HOME复制
修改完毕后点击Retry
继续安装,若还是报错,请跳过该错误继续安装。
9.安装 Oracle 11gR2 中报 Error in invoking target 'agent nmhs' of makefile 错误
错误信息:
# 完整报错信息:
INFO: /usr/bin/ld: warning: -z lazyload ignored
/usr/bin/ld: warning: -z nolazyload ignored
/usr/bin/ld: /oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib//libnmectl.a(nmectlt.o): in function `nmectlt_genSudoProps':
nmectlt.c:(.text+0x76): undefined reference to `B_DestroyKeyObject'
/usr/bin/ld: nmectlt.c:(.text+0x7f): undefined reference to `B_DestroyKeyObject'
/usr/bin/ld: nmectlt.c:(.text+0x88): undefined reference to `B_DestroyKeyObject'
/usr/bin/ld: nmectlt.c:(.text+0x91): undefined reference to `B_Destroy
INFO: KeyObject'
collect2: error: ld returned 1 exit status
INFO: make[1]: *** [/oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib/ins_emagent.mk:190: /oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib/emdctl] Error 1
INFO: make[1]: Leaving directory '/oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib'
INFO: make: *** [/oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib/ins_emagent.mk:56: emdctl] Error 2
INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'agent nmhs' of makefile '/oracle/app/oracle/product/11.2.0.1/db_1/sysman/lib/ins_emagent.mk'复制
解决办法:
$ cp $ORACLE_HOME/ctx/lib/ins_ctx.mk{,.orig}
$ vim $ORACLE_HOME/ctx/lib/ins_ctx.mk
10 ctxhx: $(CTXHXOBJ) -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/stdc.a
# 在makefile中添加链接libnnz11库的参数
$ cp $ORACLE_HOME/sysman/lib/ins_emagent.mk{,.orig}
$ vim $ORACLE_HOME/sysman/lib/ins_emagent.mk
189 $(SYSMANBIN)emdctl:
190 $(MK_EMAGENT_NMECTL) -lnnz11复制
修改完毕后,点击Retry继续安装。
10.安装 Oracle 11gR2 中报 Error in invoking target 'utilities' of makefile 错误
错误信息:
INFO: `cat /oracle/app/oracle/product/11.2.0.1/db_1/lib/sysliblist` -ldl -lm -L/oracle/app/oracle/product/11.2.0.1/db_1/lib -lnnz12
INFO: /usr/bin/ld: cannot find -lnnz12 # 关键点
INFO: collect2: error: ld returned 1 exit status
INFO: make: *** [/oracle/app/oracle/product/11.2.0.1/db_1/rdbms/lib/ins_rdbms.mk:1004: /oracle/app/oracle/product/11.2.0.1/db_1/rdbms/lib/dg4pwd] Error 1
INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make
Exception Name: MakefileException
Exception String: Error in invoking target 'utilities' of makefile '/oracle/app/oracle/product/11.2.0.1/db_1/rdbms/lib/ins_rdbms.mk'复制
解决办法:
vim /oracle/app/oracle/product/11.2.0.1/db_1/rdbms/lib/env_rdbms.mk
2779 TG4PWD_LINKLINE= $(LINK) $(OPT) $(TG4PWDMAI) \
$(LLIBTHREAD) $(LLIBCLNTSH) $(LINKLDLIBS) -lnnz11复制
11.安装 Oracle 11gR2 后使用 sqlplus 命令报 libsqlplus.so: cannot open shared object file: No such file or directory 错误
错误信息:
$ sqlplus "/as sysdba"
sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory复制
解决办法:
# 1.权限问题修复
find / -name libsqlplus.so -exec chmod +r {} \;
# 2.环境变量问题修复
export LD_LIBRARY_PATH=$ORACLE_HOME/lib复制
本文来源于【公众号: 全栈工程师修炼指南】,欢迎关注!
若文章写得不错,不要吝惜手中转发,点赞、在看,若有疑问的小伙伴,可在评论区留言你想法哟💬!
温馨提示:作者最近10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者账号[WeiyiGeeker],当前价格¥199,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!
如果此篇文章对你有帮助,请你将它转发给更多的人!
学习推荐 往期文章