在 Centos7 服务器上安装 Oracle Database (11g 第 2 版)

注:操作有风险,请自行备份好数据,本教程仅供参考。

一. 参考

1. 官网-doc-适用于 Linux x86-64 的 Oracle 数据库快速安装指南
2. 教程-CentOS7安装Oracle 11g
3. 教程-linux下安装oracle的步骤
4. 教程-Linux下安装Oracle11G详细过程

二. 操作流程

1. 安装依赖

yum install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat 
yum install unixODBC unixODBC-devel 

2. 创建用户组和用户

#查看
grep dba /etc/group 
id oracle 
#创建
groupadd oinstall 
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle

3. 检查/修改内核参数

/sbin/sysctl -a | grep sem
/sbin/sysctl -a | grep shm
/sbin/sysctl -a | grep file-max
/sbin/sysctl -a | grep ip_local_port_range
/sbin/sysctl -a | grep rmem_default
/sbin/sysctl -a | grep rmem_max
/sbin/sysctl -a | grep wmem_default
/sbin/sysctl -a | grep wmem_max
#如果任何参数的当前值高于下表中列出的值,则不要更改该参数的值。
vim /etc/sysctl.conf
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
fs.file-max = 6815744
fs.aio-max-nr = 1048576 
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

4. 检查/修改资源限制

#文件描述符设置的软限制和硬限制
ulimit -Sn
ulimit -Hn
#用户可用进程数的软限制和硬限制
ulimit -Su
ulimit -Hu
#堆栈设置的软限制和硬限制
ulimit -Ss
ulimit -Hs
#如果任何参数的当前值高于下表中列出的值,则不要更改该参数的值。
vim /etc/security/limits.conf
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240

5. 创建所需目录

mkdir -p /home/oracle
chown -R oracle:oinstall /home/oracle
chmod -R 775 /home/oracle

6. 配置X11+SSH+Xming转发

a. 教程-Linux在远程X Server上显示图形界面
b. 教程-使用SSH的X11 Forwarding远程执行GUI程序
c. 官网-Xming下载
d. 教程-Xming+Xshell 实现远程打开Linux界面

#配置SSH隧道转发X11
vim /etc/ssh/sshd_config
AllowTcpForwarding yes
#安装X11
yum install xorg-x11-xauth xclock
#测试
export LANG=C
xclock

7. 配置用户的环境变量

# ORACLE_BASE : oracle数据库安装目录
# ORACLE_SID : oracle数据库默认实例名
# LANG : 防止安装过程出现乱码
vim /home/oracle/.bash_profile 
export LANG=C
ORACLE_BASE=/home/oracle/database
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
ORACLE_SID=orcl
export ORACLE_BASE ORACLE_HOME ORACLE_SID
export PATH=$ORACLE_HOME/bin:$PATH
#启用配置
source /home/oracle/.bash_profile

8. 处理 Oracle - SQLPlus 中文乱码

a. 教程-Oracle - SQLPlus中文显示乱码问题

#查看数据库字符集
SELECT * FROM NLS_DATABASE_PARAMETERS;
#修改环境变量NLS_LANG, 设为 [NLS_LANGUAGE]_[NLS_TERRITORY].[NLS_NCHAR_CHARACTERSET]
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"

9. 安装 Oracle 数据库

# 上传安装包至/home/oracle/Temp/, 
# 解压安装文件至 database文件夹
cd /home/oracle/Temp
chown -R oracle:oinstall database
chmod -R 755 database
#ssh重新登陆用户oracle
cd ~/Temp/database
./runInstaller

10. 处理报错

#1.68%报错 Error in invoking target 'install' of makefile 
vim $ORACLE_HOME/ctx/lib/ins_ctx.mk
ctxhx: $(CTXHXOBJ)
       $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK)
#修改为:
ctxhx: $(CTXHXOBJ)
       -static $(LINK_CTXHX) $(CTXHXOBJ) $(INSO_LINK) /usr/lib64/libc.a
#点击Retry继续安装

#2.68%报错 Error in invoking target ‘agent nmhs’ of makefile 
vim $ORACLE_HOME/sysman/lib/ins_emagent.mk
$(MK_EMAGENT_NMECTL) 
#修改为:
$(MK_EMAGENT_NMECTL) -lnnz11
#保存退出后Retry

11. 启动oracle

a. 教程-修改Oracle监听默认端口号1521的方法
b. 教程-Oracle 监听器无法启动

lsnrctl start
sqlplus / as sysdba
SQL> startup
#修改数据库监听端口(11521)
SQL> show parameter local_listener
SQL> alter system set local_listener="(address = (protocol = tcp)(host = localhost)(port = 11521))";
#监听器配置(11521)
netmgr

#主机名置空(禁止将主机名改为localhost, 以防止多个localhost地址,引发监听冲突)
hostnamectl set-hostname ""
#数据库管理
dbca
#修改密码
alter user sys identified by "***";
alter user DBSNMP identified by "***";
alter user system identified by "***";
conn system/"***" as SYSDBA

12. Oracle EM

a. 教程- Oracle EM 常用命令
b. 官网-doc-Database Control

emctl start dbconsole
#当数据库监听端口改变时, 11521->11521
#配置 em资料库
emca -repos create
emca -repos drop
emca -repos recreate
#重配 数据库的 Database Control
emca -deconfig dbcontrol db
emca -config dbcontrol db

13. 设置自启动

a. 教程-设置Oracle数据库开机自启动

$ORACLE_HOME/bin/dbstart $ORACLE_HOME
$ORACLE_HOME/bin/dbshut $ORACLE_HOME
vim /etc/oratab
orcl:$ORACLE_HOME:Y

vim /etc/rc.d/init.d/oracle
#!/bin/bash
# oracle: Start/Stop Oracle Database 11g R2
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/home/oracle/database/product/11.2.0/dbhome_1
ORACLE_USER=oracle

case "$1" in
'start')
if [ -f $LOCKFILE ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   if [ ! -f $LOCKFILE ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $LOCKFILE
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $LOCKFILE ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac
exit 0 
chmod 755 /etc/init.d/oracle
chkconfig oracle on

14. 数据库导出/导出(exp/imp, 需保持版本一致)

a. 教程-Oracle中用exp/imp命令参数详解
b. 官网-doc-Original Export

#导出
exp owner=(*user1*,*user2*) file=D:\user_data.dmp

c. 教程-oracle查看表空间及大小
d. 教程-oracle表空间不足

---检查表空间(如果表空间>32G, 需要至少两个数据文件, 单个数据文件<=32G)
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
#导入(注意用户权限, (*user1*,*user2*)添加DBA角色 )
#导入完成后, 建议修改授权为(CONNECT + RESOURCE)
imp system@orcl fromuser=*user1*,*user2* touser=*user1*,*user2* file=/path/user_data.dmp

e. 官方-doc-使用 Tools Instant Client 包连接到数据库

如果您在浏览过程中,发现有侵权或者不合适的链接,请联系我们处理,谢谢
备案 域名访问错误!