yum -y install binutils compat-libstdc+±33 compat-libstdc+±33.i686 psmisc elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc.i686 glibc-common glibc-devel glibc-devel.i686 glibc-headers ksh libaio libaio.i686 libaio-devel libaio-devel.i686 libgcc libgcc.i686 libstdc++ libstdc++.i686 libstdc+±devel make sysstat unixODBC unixODBC-devel unzip glibc-.i686 glibc-devel-.i386
groupadd oinstall #创建用户组oinstall
groupadd dba #创建用户组dba
useradd -g oinstall -G dba oracle #创建oracle用户,并加入到oinstall和dba用户组
理论上单例按照需要3种用户组,实际只建两个oinstall和dba,后面再安装oracle数据库的时候把OSOPER组也设置是dba组。
a.oracle 清单组(一般为oinstall):
OINSTALL 组的成员被视为 Oracle 软件的“所有者”,拥有对 Oracle 中央清单 (oraInventory) 的写入权限。在一个 Linux 系统上首次安装 Oracle 软件时,
OUI 会创建 /etc/oraInst.loc 文件。该文件指定 Oracle 清单组的名称(默认为 oinstall)以及 Oracle 中央清单目录的路径。
b.数据库管理员(OSDBA,一般为 dba):
OSDBA 组的成员可通过操作系统身份验证使用 SQL 以 SYSDBA 身份连接到一个 Oracle 实例。该组的成员可执行关键的数据库管理任务,如创建数据库、启动和关
闭实例。该组的默认名称为dba。SYSDBA 系统权限甚至在数据库未打开时也允许访问数据库实例。对此权限的控制完全超出了数据库本身的范围。不要混淆 SYSDBA
系统权限与数据库角色 DBA。DBA 角色不包括 SYSDBA 或 SYSOPER 系统权限。
c.数据库操作员组(OSOPER,一般为 oper):
OSOPER 组的成员可通过操作系统身份验证使用 SQL 以 SYSOPER 身份连接到一个 Oracle 实例。这个可选组的成员拥有一组有限的数据库管理权限,如管理和运行备份。
该组的默认名称为oper。SYSOPER 系统权限甚至在数据库未打开时也允许访问数据库实例。对此权限的控制完全超出了数据库本身的范围。要使用该组,选择 Advanced 安装类型来安装 Oracle 数据库软件。
#查看自己的主机名
hostname
例:127.0.0.1 localhost
192.168.146.134 localhost.localdomain (自己的IP和主机名)
输入 vi /etc/sudoers
找到 root ALL=(ALL) ALL
在后面加入 oracle ALL=(ALL) ALL
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
session required /lib64/security/pam_limits.so
session required pam_limits.so
fs.file-max = 6815744
fs.aio-max-nr = 1048576
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
提示:要使 /etc/sysctl.conf 更改立即生效,执行以下命令。 输入:sysctl -p 显示如下
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
#同时创建多层文件夹: mkdir -p
01 mkdir /data/oracle #(oracle 总体目录)
02 mkdir /data/oracle/oracle_soft #(存放软件位置)
03 mkdir /data/oracle/oracle_soft/product #(存放不同版本数据库的位置:03是为了更加细化将不同版本oracle数据库区分相隔)
mkdir /data/oracle/oracle_soft/product/11.2.0
mkdir /data/oracle/oracle_soft/product/11.2.0/dbhome_1 #(这个目录配置信息里面会需要)
04 mkdir /data/oracle/oracle_data #(存放数据文件位置)
05 mkdir /data/oracle/inventory #(nventory是oracle安装工具OUI用来管理oracle安装目录的)
06 mkdir /data/oracle/flash_recovery_area #(闪回区)
#授权给用户及用户组
chown -R oracle:oinstall /data/oracle
Chmod -R 775 /data/oracle
chown -R oracle:oinstall /data/oracle
export ORACLE_BASE=/data/oracle #数据库目录结构的基目录,建议软件安装之前设置好此项
export ORACLE_HOME=$ORACLE_BASE/oracle_soft/product/11.2.0/dbhome_1 #制定ORACLE数据库软件的安装目录位置
export ORACLE_SID=orcl #初始实例名称,提供用户连接指定的数据库,可选环境变量,对简化以后与特定实例的交互很有用。
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin #PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge) 不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
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
systemctl status firewalld.service #查看防火墙状态
systemctl stop firewalld.service #关闭防火墙状态
systemctl start firewalld.service #关闭防火墙状态
vim /etc/selinux/config
修改为SELINUX=disabled
将文件导入服务器后解压
unzip p10404530_112030_Linux-x86-64_1of7.zip
unzip p10404530_112030_Linux-x86-64_2of7.zip
安装好会出现三个应答文件:db_install.rsp(安装软件的配置文件,)、dbca.rsp(数据库实例配置文件)和netca.rsp(监听模板文件)
此处有注意点:SELECTED_LANGUAGES=zh_CN //78 行 选择语言 不应该填写 安装时候会报错予验安装不兼容问题
db_install.rsp参数解读文件
编辑 vi db_install.rsp 文件,修改一些配置(后面备注的行数可能会存在一些差异视情况而见
更多详细文件解读可看该文件同目录下的:db_install.rsp参数解读文件)
oracle.install.option=INSTALL_DB_SWONLY //29 行 安装类型
ORACLE_HOSTNAME=chances //37 行 主机名称
UNIX_GROUP_NAME=oinstall //42 行 安装组
INVENTORY_LOCATION=/data/oracle/inventory //47 行 INVENTORY目录
SELECTED_LANGUAGES= //78 行 选择语言
ORACLE_HOME=/data/oracle/oracle_soft/product/11.2.1/dbhome_1 //83 行 oracle_home
ORACLE_BASE=/data/oracle //88 行 oracle_base
oracle.install.db.InstallEdition=EE //99 行 oracle版本
oracle.install.db.DBA_GROUP=dba //142行dba用户组
oracle.install.db.OPER_GROUP=oinstall //147行oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //160行 数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl //165行globalDBName
oracle.install.db.config.starterdb.SID=orcl //170行SID
oracle.install.db.config.starterdb.memoryLimit=800 //192行 自动管理内存的最小内存(M)
oracle.install.db.config.starterdb.password.ALL=oracle //233行 设定所有数据库用户使用同一个密码
DECLINE_SECURITY_UPDATES=true //385行 设置安全更新
进入解压路径database下
执行(静默安装)
./runInstaller -silent -responseFile /data/oracle_zip/database/response/db_install.rsp -ignorePrereq
tips:安装时可能会报一下错误(报错s为权限不够,目前还不知道为什么)
01 [FATAL] [INS-32038] 为主产品清单 (oraInventory) 所有权指定的操作系统组无效。
原因: 执行安装的用户不是为主产品清单 (oraInventory) 所有权指定的操作系统组的成员。
操作: 请指定安装用户所属的操作系统组。此操作系统组的所有成员都将具有主产品清单目录 (oraInventory) 的写权限
解决办法:创建 vim /etc/oraInst.loc文件
输入 inventory_loc=/data/oracle/inventory (该路径为INVENTORY目录)
inst_group=oinstall
02 这只是警告不是报错!!!,可以去看日志了
例:[WARNING] [INS-32055] 主产品清单位于 Oracle 基目录中。
原因: 主产品清单位于 Oracle 基目录中。
操作: Oracle 建议将此主产品清单放置在 Oracle 基目录之外的位置中。
出现 Successfully Setup Software. 意味着安装完成
以 root 用户的身份执行以下脚本:
1. /data/oracle/inventory/orainstRoot.sh
2. /data/oracle/oracle_soft/product/11.2.0/dbhome_1/root.sh
netca.rsp参数解读文件
#root环境下编辑
vim /解压路径/database/response/netca.rsp
INSTALL_TYPE=""typical""安装的类型
LISTENER_NUMBER=1监听器数量
LISTENER_NAMES={"LISTENER"}监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"}监听器使用的通讯协议列表
LISTENER_START=""LISTENER""监听器启动的名称
#Oracle环境下执行
netca /silent /responseFile /data/oracle_zip/database/response/netca.rsp
#执行过程中可能会报错
#1.找不到文件路径错误
#报错语句:
#UnsatisfiedLinkError exception loading native library: njni11
#java.lang.UnsatisfiedLinkError: /data/oracle/oracle_soft/product/11.2.0/dbhome_1/lib/libnjni11.so: libclntsh.so.11.1: cannot open shared object file: No such file or directory
#解决方法:
cd $ORACLE_HOME/inventory/Scripts/ext/lib/
cp libclntsh.so.11.1 $ORACLE_HOME/lib/
vim $ORACLE_HOME/network/admin/listener
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) # 将HOST的主机名修改为ip
重启监听 lsnrctl start lsnrctl stop
dbca.rsp参数解读文件
vim /data/oracle_zip/database/response/dbca.rsp
RESPONSEFILE_VERSION ="11.2.0" #不能更改
OPERATION_TYPE ="createDatabase"
GDBNAME ="orcl" #数据库的名字
SID ="ORCL" #对应的实例名字
TEMPLATENAME ="General_Purpose.dbc" #建库用的模板文件
SYSPASSWORD ="hengzc@2758" #SYS管理员密码,
SYSTEMPASSWORD ="hengzc@2758" #SYSTEM管理员密码,
SYSMANPASSWORD= "hengzc@2758"
DBSNMPPASSWORD= "hengzc@2758"
DATAFILEDESTINATION =/opt/oracle/oradata #数据文件存放目录
RECOVERYAREADESTINATION=/opt/oracle/flash_recovery_area# 恢复数据存放目录
CHARACTERSET ="ZHS16GBK" #字符集,重要!!!建库后一般不能更改,所以建库前要确定清楚。
TOTALMEMORY ="800" #800MB,物理内存*80%
dbca -silent -responseFile /data/oracle_zip/database/response/dbca.rsp
#安装完成后,查看数据库是否已运行
ps -ef | grep ora_ | grep -v grep
lsnrctl status
Oracle提供了两个脚本dbstart和dbshut用来启动和关闭数据库(包括数据库实例和监听)。
这两个脚本首先读取oratab(/etc/oratab)文件来决定哪些数据库是需要自动启动和关闭的,然后启动和关闭那些数据库
vi /opt/oracle/product/112010/db_1/bin/dbstart
将ORACLE_HOME_LISTNER=$1修改为ORACLE_HOME_LISTNER=$ORACLE_HOME
vi /opt/oracle/product/112010/db_1/bin/dbshut
将ORACLE_HOME_LISTNER=$1修改为ORACLE_HOME_LISTNER=$ORACLE_HOME
vi /etc/oratab
将orcl:/data/oracle/product/11.2.0:N中最后的N改为Y,成为orcl:/data/oracle/product/11.2.0:Y
输入命令dbshut和dbstart测试
查看监听还在不在 lsnrctl status
查看数据库还在运行没 ps -ef |grep ora_ |grep -v grep
sqlplus / as sysdba
select status from v$instance; #查看数据库状态(如果正常应该是OPEN)
上面步骤可能会报以下错误:
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/oracle/product/11.1.0/dbs/initorcl.ora'
解决方法:
这是因为在oracle9i和oracle10g中,数据库默认将使用spfile启动数据库,如果spfile不存在,则就会出现上述错误。
解决方法:
将$ORACLE_BASE/admin/数据库名称/pfile目录下的init.ora.012009233838形式的文件copy 到$ORACLE_HOME/dbs目录下initoracle.ora即可。
(注:initoracle.ora名字中oracle为你的实例名,例如我的应该是initorcl.ora)
启动数据:startup
若报错:ORA-01102: cannot mount database in EXCLUSIVE mode
原因:这个错误主要是lk文件造成的,该文件位于$ORALCE_HOME下的dbs目录下,
这个lk的主要作用是说明DATABASE MOUNT上了,不用在MOUNT了.DATABASE UNMOUNT 后会删除掉,如果DATABASE确实没有MOUNT,这个文件在你也MOUNT上,只有手工删除,所以一定要小心.
(引起这个错误的原因貌似是我前面配置dbca.rsp文件时,数据库名称和实例名不对应,导致后面IK开头的文件是"IK数据库名称",跟网上说的"lk实例名称"不一样)
解决方法:
01 进入$ORACLE_HOME/dbs目录,找到lk开头的文件,比如lkORCL,其中ORCL是oracle的sid
02 查看该文件是否被占用,若有返回信息则是被占用 fuser -u lkHENGZC
03 若被占用 kill掉 fuser -k lkHENGZC
04 startup(若已启动再关闭即可)
01.完成之后,我们需要将selinux打开,不然重启会出现问题,无法开机!!!
vim /etc/selinux/config
将之前的disabled 改成targeted 然后就可以安心了。
02.检查listener.ora
如果在安装监听过程中出现什么问题,可以将这个文件删除,然后重新执行netca步骤
里面的内容应该是这样的
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME =/data/oracle/oracle_soft/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.0)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /opt/oracle
若缺少上面SID_LIST_LISTENER这部分,目前还不知道为什么,我估计是我的实例名和服务器和数据库名没统一造成的,现在需要将SID_LIST_LISTENER这部分添加到监听文件中去
03.如果在lsnrctl start 或是lsnrctl status中有看到下面这部分内容(其实不处理 Navicat 也可以连接)
Service "orcl" has 1 instance(s).
Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
.
那么需要执行以下步骤:
sql> alter system register
sql> show parameter local_listener
修改local_listener参数,sql> alter system set local_listener='192.168.248.128';
再重新注册服务,sql> alter system register;
查看注册情况,$ lsnrctl status
创建用户 create user hengzc identified by hengzc2758;
授予管理员权限 grant create session, create table, unlimited tablespace,create sequence,create indextype to hengzc2758;