本博客将向您介绍在 CentOS 7 操作系统上安装 Oracle 11g 数据库的步骤,以及在 Oracle 数据库中创建表空间和用户的脚本。
首先,我们需要安装一些必要的软件和依赖项。在终端中执行以下命令:
yum -y install xorg-x11-xauth
yum -y install libXtst
yum -y install unzip
为了确保安装的顺利进行,我们需要暂时关闭防火墙和 SELinux:
systemctl stop firewalld
systemctl disable firewalld
vi /etc/selinux/config
# 修改 SELINUX=disabled,用于指示系统在启动时禁用 SELinux。
# 立即将 SELinux 切换到“宽松模式”,允许警告但不会阻止操作
setenforce 0
Oracle 安装过程需要一些 Swap 空间。您可以使用以下命令检查是否有足够的 Swap:
free -m
如果 Swap 空间不足,可以通过分配新的 Swap 分区来解决。
在 /etc/hosts 文件中添加主机名和 IP 地址的映射:
vi /etc/hosts
# 添加类似这样的行:192.168.20.235 oracle
安装 Oracle 所需的依赖包:
yum install -y gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-devel numactl-devel sysstat unixODBC unixODBC-devel pcre-devel
注意:CENTOS8会缺少compat-libstdc+±33-3.2.3,参考这篇博客解决
解决在CENTOS8安装Oracle数据库时缺失compat-libstdc+±33-3.2.3的问题
确认安装无误
rpm -qa gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-develnumactl-devel sysstat unixODBC unixODBC-devel pcre-devel
为 Oracle 创建所需的用户和组:
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
编辑/etc/sysctl.conf 增加以下内容,其中kernel.shmmax = 1073741824为本机物理内存(2G)的一半,单位为byte
vi /etc/sysctl.conf
# 增加以下内容
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1048576
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
# 修改完之后立即执行修改:
sysctl -p
编辑 /etc/security/limits.conf 文件并添加以下内容:
vi /etc/security/limits.conf
# 添加用户限制设置
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
编辑 /etc/pam.d/login 文件并添加以下内容:
vi /etc/pam.d/login
# 添加 PAM 配置
session required /lib64/security/pam_limits.so
session required pam_limits.so
vi /etc/profile
# 添加以下内容:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
# 执行生效
source /etc/profile
创建 Oracle 所需的目录并设置权限:
mkdir -p /u01/oracle/product/11.2.0
mkdir /u01/oracle/oradata
mkdir /u01/oraInventory
mkdir /u01/oracle/fast_recovery_area
chown -R oracle:oinstall /u01/oracle
chmod -R 775 /u01/oracle
chown -R oracle:oinstall /u01/oraInventory
chmod -R 775 /u01/oraInventory
将 Oracle 软件包 1of2 2of2 上传至目录/opt/oracle下:
mkdir /opt/oracle
## 上传文件到/opt/oracle 后执行以下命令
chown -R oracle:oinstall /opt/oracle
chmod 755 -R /opt/oracle
su - oracle
cd /opt/oracle
unzip linux.x64_11gR2_database_1of2.zip && unzip linux.x64_11gR2_database_2of2.zip
编辑 ~/.bash_profile 文件并添加 Oracle 相关的环境变量:
vi ~/.bash_profile
# 添加 Oracle 环境变量
ORACLE_BASE=/u01/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
ORACLE_SID=orcl
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
# 执行以下命令加载环境变量
source ~/.bash_profile
编辑 /opt/oracle/database/response/db_install.rsp 文件,并根据您的需求设置选项。
vi /opt/oracle/database/response/db_install.rsp
# 需要设置的选项如下:
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=oracle
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/u01/oracle/product/11.2.0
ORACLE_BASE=/u01/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
执行安装命令,并根据静默安装文件进行安装:
cd /opt/oracle/database
./runInstaller -silent -responseFile /opt/oracle/database/response/db_install.rsp -ignorePrereq
centos8需要安装如下
yum install libnsl -y
否则会报错如下
[oracle@GreenCloud response]$ cd /opt/oracle/database
[oracle@GreenCloud database]$ ./runInstaller -silent -responseFile /opt/oracle/database/response/db_install.rsp -ignorePrereq
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 81336 MB Passed
Checking swap space: must be greater than 150 MB. Actual 255 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2023-11-12_01-47-38PM. Please wait ...[oracle@GreenCloud database]$ 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.
以 root 用户身份执行以下两个脚本:
/u01/oraInventory/orainstRoot.sh
/u01/oracle/product/11.2.0/root.sh
使用静默方式安装监听器:
netca /silent /responseFile /opt/oracle/database/response/netca.rsp
编辑 /opt/oracle/database/response/dbca.rsp 文件,并设置数据库相关选项。
vi /opt/oracle/database/response/dbca.rsp
# 修改如下内容
GDBNAME= "orcl"
SID ="orcl"
SYSPASSWORD= "Oracle_123"
SYSTEMPASSWORD= "Oracle_123"
SYSMANPASSWORD= "Oracle_123"
DBSNMPPASSWORD= "Oracle_123"
DATAFILEDESTINATION=/u01/oracle/oradata
RECOVERYAREADESTINATION=/u01/oracle/fast_recovery_area
CHARACTERSET= "AL32UTF8"
# ----TOTALMEMORY ="1638" 为1638MB,物理内存2G*80%。
TOTALMEMORY= "40960"
# 执行如下命令安装
dbca -silent -responseFile /opt/oracle/database/response/dbca.rsp
到此处,您的 Oracle 11g 数据库已经成功安装和配置。
登录数据库
sqlplus / as sysdba
首先,脚本创建了两个不同类型的表空间:
CREATE TABLESPACE JGCRM_ZH LOGGING DATAFILE '/u01/oracle/oradata/jgcrm_zh.dbf' SIZE 2048m AUTOEXTEND ON NEXT 512m MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
这段代码创建了名为 “JGCRM_ZH” 的表空间,其中包含以下设置:
CREATE TEMPORARY TABLESPACE JGCRM_ZH_TEMP TEMPFILE '/u01/oracle/oradata/jgcrm_zh_temp.dbf' SIZE 512m AUTOEXTEND ON NEXT 512m MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
这段代码创建了名为 “JGCRM_ZH_TEMP” 的临时表空间,与上述过程类似,包含以下设置:
接下来,脚本创建一个名为 “JGCRM_ZH” 的用户,并为该用户分配了一系列权限:
create user JGCRM_ZH identified by JGCRM_ZH default tablespace jgcrm_zh temporary tablespace jgcrm_zh_temp profile DEFAULT;
这段代码创建了一个用户 “JGCRM_ZH”,具有以下属性:
以下部分将各种权限授予了用户 “JGCRM_ZH”:
-- 为 JGCRM_ZH 用户授予基本权限
GRANT CONNECT TO JGCRM_ZH;
GRANT RESOURCE TO JGCRM_ZH;
GRANT CREATE PROCEDURE TO JGCRM_ZH;
GRANT CREATE SEQUENCE TO JGCRM_ZH;
GRANT CREATE SYNONYM TO JGCRM_ZH;
GRANT CREATE TRIGGER TO JGCRM_ZH;
GRANT CREATE TYPE TO JGCRM_ZH;
GRANT CREATE VIEW TO JGCRM_ZH;
-- 为 JGCRM_ZH 用户授予数据导入/导出的目录权限
GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO JGCRM_ZH;
-- 为 JGCRM_ZH 用户授予会话和基本对象创建权限
GRANT CREATE SESSION TO JGCRM_ZH;
GRANT CREATE TABLE TO JGCRM_ZH;
GRANT CREATE PROCEDURE TO JGCRM_ZH;
GRANT CREATE ANY PROCEDURE TO JGCRM_ZH; -- 合并 CREATE PROCEDURE 和 CREATE ANY PROCEDURE
GRANT CREATE TRIGGER TO JGCRM_ZH;
-- 为 JGCRM_ZH 用户授予分析和执行权限
GRANT ANALYZE ANY TO JGCRM_ZH;
GRANT EXECUTE ANY PROCEDURE TO JGCRM_ZH WITH ADMIN OPTION;
-- 为 JGCRM_ZH 用户授予额外的权限
GRANT SELECT ANY SEQUENCE TO JGCRM_ZH;
GRANT DATAPUMP_IMP_FULL_DATABASE TO JGCRM_ZH;
-- 为 JGCRM_ZH 用户授予无限表空间权限,并设置 ADMIN OPTION
GRANT UNLIMITED TABLESPACE TO JGCRM_ZH WITH ADMIN OPTION;
这些代码行将各种权限授予用户 “JGCRM_ZH”: