注:操作有风险,请自行备份好数据,本教程仅供参考。
一. 参考
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. 设置自启动
$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