Oracle部署
基本环境介绍

Linux我们默认使用CentOS 7 x64

所以为了对应操作系统我们使用64位的Oracle 11g数据库

Oracle11g需要准备至少:2核CPU、2G内存、8GB的硬盘空间

    查看cpu详细信息

    lscpu
        

    查看内存详细信息

    free -h
        

    查看存储盘详细信息

    lsblk

确保服务器能访问外网,可以访问百度进行测试

ping rxqwkj.cn

检测是否安装了Oracle

查看是否有 oracle 的进程

ps -ef | grep ora

检查是否有oracle用户

一般安装oracle的时候默认会建一个oracle用户

id oracle

卸载Oracle
1.重做一次虚拟机

因为Oracle的卸载极其麻烦,从效率上讲甚至不如直接重新安装虚拟机

2.卸载Oracle

注意:

(1) 在卸载前先将数据库中的所有信息到处,使用工具SQL Developer。

(2) 卸载完后可能有些信息已经被删除,例如oralce用户、dba组、oinstall组和一些环境变量要重新配置下。

(3) 在配置环境变量的时候,配置文档中的orcl要更改为自己环境中用到的数据库实例。

使用 SQL*PLUS 停止数据库

[oracle@oracle bin]$ ./sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Sat Jul 30 08:45:23 2022

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected to an idle instance.
SQL> shutdown [immediate]
SP2-0717: illegal SHUTDOWN option
SQL> exit
Disconnected

停止监听

[oracle@oracle bin]$ lsnrctl stop
  

停止 HTTP 服务

 $ORACLE_HOME/Apache/Apache/bin/apachectl stop
    

用 su 或者重新登录到 root( 如想重新安装可以保留 oracle 用户,省得输入环境变量了 )

删除oracle安装目录:获取oracle用户下的ORACLE_HOME和ORACLE_BASE路径并执行删除

[root@oracle ~]$ echo $ORACLE_BASE
/u01/app/oracle
[root@oracle ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/11.2.0/db_1

rm -rf /u01/app/oracle
   

删除/usr/local/bin目录下的dbhome、oraenv、coraenv文件

rm -rf /usr/local/bin/dbhome
rm -rf /usr/local/bin/oraenv
rm -rf /usr/local/bin/coraenv
 

删除/etc目录下的oratab、oraInst.loc文件、删除/etc/oracle目录

rm -rf /etc/oratab
rm -rf /etc/oracle
rm -rf /etc/oraInst.loc
 

删除oracle用户,删除dba和oinstall用户组

userdel -rf oracle
groupdel dba
groupdel oinstall
   

再次切换Oracle,提示不存在

[root@oracle ~]# su - oracle
su: user oracle does not exist

安装准备

Oracle的安装需要图形化界面,所以身为命令形式的Linux操作系统就需要安装图形化界面:VNC;

为了安全起见,不建议使用root做为vnc用户,所以,安装oracle时要建立单独的用户去安装oracle相关

建立oracle用户和用户组

在Linux中创建名为oinstall的用户组

groupadd oinstall

创建dba用户组

groupadd dba

创建oper用户组

groupadd oper

为dba和oper用户组创建oracle用户

-g 主用户组

-G 附加组

useradd -g oinstall -G dba,oper oracle

将oracle用户的密码设置为oracle

echo "oracle"|passwd oracle --stdin

为Oracle的安装创建相关目录

建文件夹

mkdir -p /u01/app/oracle/product/11.2.0/db_1

改变属主和属组

chown -R oracle:oinstall /u01/app

为文件夹授权

chmod -R 775 /u01/app

优化OS内核参数

vim /etc/sysctl.conf

添加如下内容

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152

kernel.shmmax 参数设置为物理内存的一半

kernel.shmmax = 1200000000
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

因为刚自定义配置了shmmax、shmmni、shmall,所以注释掉原有自带的shmmax、shmall这些属性

保存并退出后,需要使使参数生效

sysctl -p

限制oracle用户的shell权限

为了优化性能,需要添加oracle用户的限制参数

vim /etc/security/limits.conf

在文件末尾添加下面四行

设置进程数软限制

oracle soft nproc 2047

设置进程数硬限制

oracle hard nproc 16384

设置文件数软限制

oracle soft nofile 1024

设置文件数硬限制

oracle hard nofile 65536

进程会话限制可以采用pam_limits认证模块来实现,通过修改登录程序login的PAM设置以启用该认证

vim /etc/pam.d/login # 在文件最后添加下面一行
session required /lib64/security/pam_limits.so

一般都是64位系统,64位系统需要设置为/lib64/security/pam_limits.so 否则重启服务器后就会出现命令行无法登录,但是通过桌面方式能登录的情况

session required pam_limits.so

使参数生效

source /etc/profile

为Oracle用户添加Oracle环境变量

su - oracle
vim .bash_profile

添加如下内容

ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
PATH=$PATH:$ORACLE_HOME/bin
ORACLE_SID=orcl
NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

退出后需要刷新环境变量

source .bash_profile

source /home/oracle/.bash_profile

配置hostname(本机IP映射)

安装oracle时,一定要保证主机名出现在/etc/hosts中

vim /etc/hosts

添加如下内容

127.0.0.1 localhost
ip 主机名

测试hostname

ping -c 3 主机名

/etc/sysconfig/network中的hostname要与/etc/hosts中的一致

vim /etc/sysconfig/network

添加如下内容

NETWORKING=yes
HOSTNAME=主机名

服务器IP

GATEWAY=192.168.222.30
NTPSERVERARGS=iburst

安装VNC&Oracle相关依赖
配置yum源

cd /etc
mv yum.repos.d yum.repos.d.bak
mkdir yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

清理缓存

yum clean all

建缓存

yum makecache
#安装epel源
yum -y install epel-release

安装依赖

#图形界面必备X Window System
yum -y groupinstall "X Window System"
#安装VNC+图形、oracle需要的依赖(软件)
yum -y install
binutils
compat-libcap1
compat-libstdc++-33
compat-libstdc++-33*.i686
elfutils-libelf-devel
gcc
gcc-c++
glibc*.i686
glibc
glibc-devel
glibc-devel*.i686
ksh
libgcc*.i686
libgcc
libstdc++
libstdc++.i686
libstdc++-devel
libstdc++-devel
.i686
libaio
libaio*.i686
libaio-devel
libaio-devel*.i686
make
sysstat
unixODBC
unixODBC*.i686
unixODBC-devel
unixODBC-devel*.i686
libXp

检查依赖是否安装完成

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"

如果安装失败的依赖进行单独安装

方法一:通过yum安装

yum -y install pdksh(安装失败的package)

方法二:wget命令直接下载pdksh的rpm包,下载到至/tmp/

wget -o /tmp/pdksh-5.2.14-37.el5_8.1.x86_64.rpm http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

安装pdksh

rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

安装语言包

服务器&VNC&Oracle安装包语言要统一,这里我使用的是中文安装包,为避免中文乱码,需要安装中文语言包(如果你都是英文可以忽略此步骤)

—————上传方法—————

1.切换至oracle安装目录

cd /u01/

2.将文件上传至服务器

rz/sz

shell工具拖拉拽

---------------使用scp命令----------------------------

scp -r dir username@host:dir
命令 递归 要拷贝的文件路径 目的主机用户名@目的主机ip:目的路径

---------------------------------------------------------------

3.安装中文字体包

yum –y install pdksh-5.2.14-37.el5_8.1.x86_64.rpm

关闭防火墙
临时关闭防火墙

systemctl stop firewalld

查看防火墙是否开机自动启动

systemctl list-unit-files|grep firewalld

firewalld.service enabled

说明:enabled表示自动启动;disabled表示关闭

永久关闭防火墙,开机不自动启动

systemctl disable firewalld

上传Oracle安装文件

切换用户并切换目录

cd /u01
chown -R oracle:oinstall oracle
su - oracle
mkdir /u01/oracle
cd /u01/oracle

上传安装文件
解压缩安装文件

unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip

完成后切换root用户,复制授权

su - root
mkdir /home/oracle/etc/
cp /u01/oracle/database/response/* /home/oracle/etc/
chmod 777 /home/oracle/etc/*.rsp

登录oracle用户

su – oracle
vi /home/oracle/etc/db_install.rsp

信息如下:

oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oracle/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=true
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oinstall
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.memoryLimit=512
oracle.install.db.config.starterdb.password.ALL=oracle
DECLINE_SECURITY_UPDATES=true

执行Oracle安装文件

su - oracle
cd /u01/oracle/database
./runInstaller -silent -force -responseFile /home/oracle/etc/db_install.rsp -ignorePrereq

使用root用户执行脚本

su - root
/u01/app/oracle/product/11.2.0/db_1/root.sh

增加或修改oracle的环境变量

su - oracle
cat >> ~/.bash_profile <<EOF
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=.:$:$HOME/bin:$ORACLE_HOME/bin
export PATH=$
:/usr/bin:/bin:/usr/local/bin
export LD_LIBRARY_PATH=$
:$ORACLE_HOME/lib
export LD_LIBRARY_PATH=$
:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=$
:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=$
:$ORACLE_HOME/jlib
export CLASSPATH=$
:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=$
:$ORACLE_HOME/network/jlib
export LIBPATH=$
:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export ORACLE_OWNER=oracle
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
EOF
#使配置生效
source ~/.bash_profile

配置监听

cd /u01/app/oracle/product/11.2.0/db_1/bin
./netca /silent /responseFile /home/oracle/etc/netca.rsp
#启动监听
/u01/app/oracle/product/11.2.0/db_1/bin/lsnrctl start
#查看监听状态
/u01/app/oracle/product/11.2.0/db_1/bin/lsnrctl status

创建数据库

编辑应答文件

su - root
vi /etc/dbca.rsp
GDBNAME="orcl.oracle"
SID="orcl"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
CHARACTERSET="AL32UTF8"
NATIONALCHARACTERSET="UTF8"

#建库
su - oracle

执行:

$ORACLE_HOME/bin/dbca -silent -responseFile /home/oracle/etc/dbca.rsp
###注意:里面有数据库创建,没有的话,查看之前配置,这里面会清屏,输入两遍oracle,每次都回车,之后再回车,稍等一会就出来了

设置Oracle开机启动

vim /etc/oratab
# 把“N”改成“Y”
orcl:/db/app/oracle/product/11.2.0/db_1:Y 

删除实例

[oracle@oracle bin]$ vi /etc/oratab
orcl:/db/app/oracle/product/11.2.0/db_1:Y # //把“N”改成“Y” 更改,不是添加,没有出现就是之前的配置有问题

保存退出

[oracle@oracle bin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/bin

通过dbstart 启动此实例,监听器

ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener

Usage: ./dbstart ORACLE_HOME

[oracle@oracle bin]$ ./dbstart $ORACLE_HOME;

oracle的进程关闭,监听器也停止;

[oracle@oracle bin]$ ./dbshut $ORACLE_HOME;

启动监听

[oracle@oracle bin]$ ./lsnrctl start;

查看监听

[oracle@oracle bin]$ ./lsnrctl status

登陆Oracle

[oracle@oracle bin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/bin
[oracle@oracle bin]$ ./sqlplus /nolog

进入系统管理用户

SQL> conn / as sysdba
Connected to an idle instance.

启动oracle实例

SQL> startup;
#出现报错,exit退出

[oracle@mydb pfile]$ cd /u01/app/oracle/admin/orcl11g/pfile/
[oracle@mydb pfile]$ls
#将下面的init带数字的复制
[oracle@mydb pfile]$ cp 刚才复制的init带数字的文件到 /u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora

[oracle@mydb pfile]$sqlplus / as sysdba
SQL> startup;
SQL> exit

[oracle@oracle admin]$ pwd
/u01/app/oracle/product/11.2.0/db_1/network/admin
[oracle@linux admin]$ vi tnsnames.ora

tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora

Generated by Oracle configuration tools.

orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =oracle)(PORT = 1521)) #(HOST =主机名)
(CONNECT_DATA =
(SID = orcl)
)
)

[oracle@linux admin]$ vi listener.ora

listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora

Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST =oracle)(PORT = 1521)) #(HOST =主机名)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)

DEFAULT_SERVICE_LISTENER = (orcl)
ADR_BASE_LISTENER = /u01/app/oracle

[oracle@linux admin]$ vi sqlnet.ora

sqlnet.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora

Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /u01/app/oracle

[oracle@linux admin]$ lsnrctl stop
[oracle@linux admin]$ lsnrctl start
[oracle@linux admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JUN-2022 16:26:16

Copyright (c) 1991, 2013, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER

Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 22-APR-2022 16:39:58
Uptime 39 days 23 hr. 46 min. 18 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service orcl
Listener Parameter File /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/linux/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=linux)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

#查看 ,配置开机启动监听
[oracle@mydb bin]$ vi /etc/oratab
orcl:/u01/app/oracle/product/11.2.0/db_1:Y ###这里查看是不是正确的
[root@mydb ~]# vi /etc/rc.d/rc.local
su - oracle -lc /u01/app/oracle/product/11.2.0/db_1/bin/dbstart ##这个要添加