第一步下载问题
centos 下要用wget 下载,发现老要登录直接wget 是不行的。
wget --http-user=[oracle网站登录账号] --http-password=[oracle 网站登录密码] --no-check-certificate --output-document=linux.zseries64_11gR2_database_1of2.zip "https://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_1of2.zip?AuthParam=1556897560_f2690b16de8954cc6d804e61753c6838"
关键就是最后那个 AuthParam 怎么拿到呢?
用Chrome,或者Firefox 直接在 https://oracle.com/technetwork/database/enterprise-edition/downloads/index.html 点击下载文件,之后暂停下载。chrome://downloads/ 复制出来的链接就行了。
第二步解压问题
cat linux.zseries64_11gR2_database_1of2.zip linux.zseries64_11gR2_database_1of2.zip > linux.zseries64_11gR2_database.zip
unzip linux.zseries64_11gR2_database.zip
第三步依赖解决
yum -y install binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel
然后是检查是否有包没安装成功
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers libaio libaio-devel libgcc libstdc++ libstdc++-devel make pdksh sysstat unixODBC unixODBC-devel|grep "not installed"
centos 7 必定会报 pdksh not installed
wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
第四步Oracle 用户设置
添加oracle用户组及用户
groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle
添加完成后,查看oracle用户
id oracle
初始化oracle用户的密码
passwd oracle
限制Oracle 用户shell权限
修改 Oracle 用户 ~/.bash_profile
umask 022
export ORACLE_BASE=/apps/svr/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export ORACLE_SID=orcl
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export SQLPATH=$ORACLE_HOME/sqlplus/admin:/home/oracle/admin/sql
ulimit -u 16384 -n 63536 #linux
export ORACLE_HOSTNAME=centos-oracle
export LC_ALL="en_US"
export LANG="en_US"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
由于Oracle 官方文档里面有个 /u01/app/oracle 这样的例子,结果网上很多都照抄,其实可以不要那个/u01,据说是为了兼容老机器。
修改/etc/security/limits.conf 添加如下内容:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
修改验证登录文件
vim /etc/pam.d/login
session required pam_limits.so
session required /lib64/security/pam_limits.so
修改 /etc/profile 添加:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
创建oracle软件安装目录
mkdir -p /apps/svr/oracle
chown -R oracle:oinstall /apps/svr/oracle
chmod -R 775 /opt
内核参数优化
kernel.shmmax oracle 文档说设置为物理内存的一半;1073741824 这个值是1G 自己乘一下即可。
其他参数是Oracle 建议值。
修改/etc/sysctl.conf 文件 添加如下内容:
vim /etc/sysctl.conf
添加以下参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967296
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
退出编辑后执行以下命令应用修改
/sbin/sysctl -p
交换分区设置(非必有)
由于我在阿里云安装系统的时候没有设置交换分区。在安装过程中发现没有交换分区走不下去。
于是必须先创建个交换分区。
交换分区创建
先检查一下, 是否已经有交换分区
swapon -s
如没有则执行下面的命令创建,8192 是8G 的意思,Oracle 要求 交换分区 >= 物理内存
dd if=/dev/zero of=/swapfile bs=1M count=8192
chown root:root /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
启动自动挂载
vim /etc/fstab
添加这行进去
/swapfile swap swap default 0 0
前戏到这里才结束
为了方便切换 Oracle 用户 修改 vim ~/.bashrc
添加这句 alias suo='su - oracle', 然后 source ~/.bashrc
编辑安装默认应答文件
应答文件在 解压包的 response 目录下。copy 一份出来找个地方放
/apps/svr/etc/response/db_install.rsp 按照下面这个改
https://blog.51cto.com/loofeer/1119713
ORACLE_HOSTNAME 自己配置在 /etc/hosts 里面的值举个例子
127.0.0.1 centos_oracle
安装前必定要做的, 指定Oracle 安装清单保存位置,不然会报错安装不下去。
vim /etc/oraInst.loc
添加这两行
inventory_loc=/apps/svr/oraInventory
inst_group=oinstall
编辑好 db_install.rsp 之后运行cd 到一开始解压的文件夹我的路径是/apps/svr/database
su oracle
./runInstaller -silent -debug -force -noconfig -IgnoreSysPreReqs -ignorePrereq -responseFile /apps/svr/etc/response/db_install.rsp
debug 在安装过程中会展示日志。安装的时候其实有些错误,没仔细看,回头补一下【mark】
$ The following configuration scripts need to be executed as the "root" user.
#!/bin/sh
#Root scripts to run
/apps/svr/oracle/product/11.2.0/db/root.sh
To execute the configuration scripts:
1. Open a terminal window
2. Log in as "root"
3. Run the scripts
4. Return to this window and hit "Enter" key to continue
su 到root 之后添加两个环境变量,不然跑了会报错。
vim /etc/profile
export ORACLE_OWNER = oracle
export ORACLE_HOME = /apps/svr/oracle/product/11.2.0/db
网友 文章里有 orainstRoot.sh 这个,需要跑,但是我安装完没有这个文件 有点担心~~
配置默认监听
netca /silent /responsefile /apps/svr/etc/response/netca.rsp
查看监听状态
netstat -tnulp | grep 1521
静默安装数据库实例
编辑dbca 应答文件
vim /apps/svr/etc/response/dbca.rsp
主要参考:https://blog.csdn.net/Kenny1993/article/details/75038670
source ~/.bash_profile
dbca -silent -responseFile /apps/svr/etc/response/dbca.rsp
完了之后在命令行输入
sqlplus / as sysdba 登录查看实例信息。【这里也踩了个坑,看问题三】
顺便设置 scott 密码
alter user scott account unlock;
lter user scott identified by tiger;
设置oracle 开机启动
回到root 用户,修改 dbstart
vim $ORACLE_HOME/bin/dbstart
ORACLE_HOME_LISTNER=$ORACLE_HOME
修改 dbshut
vim $ORACLE_HOME/bin/dbshut
ORACLE_HOME_LISTNER=$ORACLE_HOME
vim /etc/oratab
orcl:/db/app/oracle/product/11.2.0: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.
#
# processname: oracle
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/apps/svr/oracle/product/11.2.0/db
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
连接Oracle 客户端
https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html
采坑历程
我遇到也是这个报错信息
问题1 :
[FATAL] [INS-32035] Unable to create a new central inventory at the specified location.
CAUSE: The central inventory location provided is not empty.
ACTION: Please provide another location for the inventory, or clean up the current location.
问题2:
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
CAUSE: The Central Inventory is located in the Oracle base.
ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
问题3
dbstart 报错
/apps/svr/oracle/product/11.2.0/db/bin/dbstart: Starting up database "orcl"
Sat May 4 18:51:18 CST 2019
SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0
Unsafe to proceed
SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly
root: Error: Database instance "orcl" NOT started.
发现是日期环境变量写错了,这个是正确的在 oracle 用户目录下的
vim /home/oracle/.bash_profile
export NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS
参考文章
Oracle 官方安装文档
https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCBCFDI
Oracle中文安装文档
https://www.oracle.com/technetwork/cn/articles/revitt-oem-096363-zhs.html#2
比较完整的安装文档:
https://www.jianshu.com/p/b4200e721bfd
http://blog.itpub.net/22664653/viewspace-1062585
https://blog.csdn.net/Kenny1993/article/details/75038670
https://blog.51cto.com/niubdada/2164071
分配交换分区的方法
https://blog.51cto.com/lianlianw/1742472
https://zhangshuqiao.org/2018-06/Linux%E4%B8%8B%E5%A2%9E%E5%8A%A0%E3%80%81%E5%88%A0%E9%99%A4Swap%E6%96%87%E4%BB%B6/
db_install.rsp 详细解析
https://blog.51cto.com/loofeer/1119713
创建数据库实例
https://blog.51cto.com/hbxztc/1884833
https://blog.51cto.com/hbxztc/1906532
运行 sqlplus / as sysdba 报错解决
https://community.oracle.com/docs/DOC-888935