CentOS-7 静默安装 oracle11g

前言:安装期间看了无数的博客,帖子,每一篇开头都说“踩坑无数,我的帖子是最全的,最完整的,最保险之类的话”,但是我们自己按照博客安装的时候报错很多,所以没有最好的,能找到适合自己系统的就阿弥陀佛咯,当然了,下文也有很多直接copy别人的:

准备工作:

1:CentOS 7操作系统(我是单独挂载了一个20G的/oracle作为数据库的安装一级目录,我的机器内存是4G,swap我给加到了10G(swap最好是物理内存 x2),不会加的可以看我的博客)

2:oracle安装包两个  linux.x64_11gR2_database_1of2  ,  linux.x64_11gR2_database_2of2

3:配好yum源,具体可见博客

4:以下操作在没有创建oracle用户之前都是在root用户下面操作,建了oracle用户之后就在oracle用户下操作,除非特殊规定在root下面执行

开始干活:

1:安装依赖包

yum -y install binutils \
unixODBC-devel \
unixODBC \
sysstat \
pdksh \
make \
libstdc++-devel \
libstdc++ \
libgcc \
libaio-devel \
libaio \
glibc-headers \
glibc-devel \
glibc-common \
glibc \
gcc-c++ \
gcc \
expat \
elfutils-libelf-devel \
elfutils-libelf \
compat-libstdc++-33 \
ksh

2:查看依赖包是否安装成功

rpm -q \
ksh \
unixODBC \
sysstat \
pdksh \
make \
libstdc++-devel \
libstdc++ \
libgcc \
libaio-devel \
libaio \
glibc-headers \
glibc-devel \
glibc-common \
glibc \
gcc-c++ \
gcc \
expat \
elfutils-libelf-devel \
elfutils-libelf \
compat-libstdc++-33 \
binutils \
unixODBC-devel | grep "not installed"

会有一个显示未安装成功,没事儿,可忽略

3:创建oracle用户以及各用户组

groupadd oinstall
groupadd db
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba -d /home/oracle oracle      #  -g表示主组  -G表示附属组  -d表示家目录
id oracle    # 看下用户信息对不对
passwd oracle   # 修改oralce用户密码

4:将hostname添加至 /etc/hosts

192.168.11.11     centos7     #centos7 为我的主机名

5:ping -c 3 centos7    # 看看能不能ping通

6、优化OS内核参数

Step1:vi /etc/sysctl.conf
## 内容如下(以下是我24G服务器的配置):
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=4194304
kernel.shmmni=4096
kernel.shmmax=17179869184‬
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=1048586
FreshQin题外话-详解参数:
kernel.shmall的单位是页。
简述:2097152 =8G ,4194304=16G
详述:对于X86的linux系统,一页=4k,也就是4096字节。kernel.shmall = 2097152 就是 2097152*4k/1024/1024 = 8G 就是说可用共享内存一共8G。
一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下
16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152
的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和
SGA_TARGET 为 12G(您想设置的SGA 最大大小,当然也可以是2G~14G 等,还要协调PGA
参数及OS 等其他内存使用,不能设置太满,比如16G)。
kernel.shmmni:
共享内存段的最大数量,shmmni 缺省值 4096 ,一般肯定是够用了
kernel.shmmax:
Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值(以字节为单位),
设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降,最大值为16GB(在大多数情况下,该值应该比SGA大)。
其值应>=sag_max_size初始化参数的大小,否则SAG由多个内存段构成,效率降低,
还要不小于物理内存的一半,默认情况下在32位x86系统中,Oracle SGA最大不能超过1.7GB.
缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G(2147483648)
针对24G的服务器,至少12G的配置,则是17179869184‬
其他参数简单说明:
kernel.sem // 表示设置的信号量
fs.file-max // 表示一个进程可以打开的文件句柄的最大数量.
net.ipv4.ip_local_port_range //专用服务器模式下与用户进程通信时分配给用户的端口区间
net.core.rmem_default // 默认接收缓冲区大小
net.core.rmem_max // 接收缓冲区最大值
net.core.wmem_default // 默认的发送缓冲区大小
net.core.wmem_max // 发送缓冲区最大值

添加完毕在命令行执行  sysctl -p   使之生效

7、限制oracle用户的shell权限:
Step1:vi /etc/security/limits.conf
#在末尾添加
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
FreshQin题外话-limits.conf 配置说明:

domain:
username|@groupname:设置需要被限制的用户名,组名前面加@ 与 用户名 区别。 * 表示所有用户(注意有的系统不支持哦)。
type:
soft 指的是当前系统生效的设置值,
hard 表明系统中所能设定的最大值(soft 的限制不能比har 限制高 )
- 就表明同时设置了 soft 和 hard 的值。
resource(针对Oracle的我们主要配置nproc nofile):
as-地址空间限制
rss-最大持久设置大小
cpu-以分钟为单位的最多 CPU 时间
core-限制内核文件的大小
date-最大数据大小
stack-最大栈大小
fsize-最大文件大小
noproc-进程的最大数目
nofile-打开文件的最大数目
memlock-最大锁定内存地址空间
maxlogins-此用户允许登录的最大数目
value: 限制的值

Step2:vi /etc/pam.d/login
#在末尾添加
session required /lib64/security/pam_limits.so
session required pam_limits.so

Step3:vi /etc/profile
#在末尾添加
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

8、创建oracle安装目录:
mkdir -p /oracle/app/oracle/product/11.2.0/client
mkdir /oracle/app/oracle/oradata
mkdir /oracle/app/oraInventory
mkdir /oracle/app/oracle/fast_recovery_area
chown -R oracle:oinstall /oracle
chmod -R 775 /oracle
创建 vi /etc/oraInst.loc
inventory_loc=/oracle/app/oraInventory
inst_group=oinstall
并授权:
chown oracle:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc

9、配置oracle用户环境变量:
su - oracle ## oracle用户登陆(如果无法直接切换,请使用oracle/密码 登录)
vi .bash_profile
#注意修改你的hostname!
export ORACLE_HOSTNAME=cainiaoke
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_SID=kehana
export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/client
export LANG="en_us"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
## 以上配置完成后,建议重启系统 或分别执行以下命令:
source /home/oracle/.bash_profile

10,解压oracle安装包

cd /oracle

unzip  linux.x64_11gR2_database_1of2 

unzip  linux.x64_11gR2_database_2of2

11,修改静默安装响应文件

vi /oracle/database/response/db_install.rsp

在此文件中修改以下配置信息,切记不是添加,是修改
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=centos7     #主机名替换成自己的
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oracle/app/oraInventory     # oraInventory目录最好别在ORACLE_BASE目录中
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/client
ORACLE_BASE=/oracle/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true

12,开始静默安装

cd /oracle/database

./runInstaller -silent -responseFile/oracle/database/response/db_install.rsp -ignorePrereq

[oracle@cainiaoke163 database]$ ./runInstaller -silent -responseFile /oracle/database/response/db_install.rsp -ignorePrereq
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 3424 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 10239 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2021-02-04_10-35-13AM. Please wait ...[oracle@cainiaoke163 database]$ You can find the log of this install session at:
 /oracle/app/oraInventory/logs/installActions2021-02-04_10-35-13AM.log
The following configuration scripts need to be executed as the "root" user. 
 #!/bin/sh 
 #Root scripts to run

/oracle/app/oraInventory/orainstRoot.sh
/oracle/app/oracle/product/11.2.0/client/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 

Successfully Setup Software.

[oracle@cainiaoke163 database]$ 

出现successfully表示成功

然后用 root 用户执行以下两个脚本:
sh /oracle/app/oraInventory/orainstRoot.sh
sh /oracle/app/oracle/product/11.2.0/client/root.sh

13:静默方式配置监听

[oracle@cainiaoke bin]$ netca /silent /responseFile /oracle/database/response/netca.rsp

Parsing command line arguments:
    Parameter "silent" = true
    Parameter "responsefile" = /oracle/database/response/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
    Running Listener Control: 
      /oracle/app/oracle/product/11.2.0/client/bin/lsnrctl start LISTENER
    Listener Control complete.
    Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0
[oracle@cainiaoke bin]$ netstat -antlp|grep 1521
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::1521                 :::*                    LISTEN      29603/tnslsnr

安装完毕后并执行 netstat -antlp|grep 1521查看端口在不在

14,静默方式建立新库并建立对应的实例

vi /oracle/database/response/dbca.rsp
修改文件中一下内容,切记是修改,不是添加
GDBNAME= "ora11g"
SID =" ora11g"
SYSPASSWORD= "abcd1234"
SYSTEMPASSWORD= "abcd1234"
SYSMANPASSWORD= " abcd1234"
DBSNMPPASSWORD= " abcd1234"
DATAFILEDESTINATION=/oracle/app/oracle/oradata
RECOVERYAREADESTINATION=/oracle/app/oracle/fast_recovery_area
CHARACTERSET= "ZHS16GBK"
TOTALMEMORY= "1638"

修改完毕之后执行截图里面的命令

[oracle@cainiaoke163 ~]$ dbca -silent -responseFile /oracle/database/response/dbca.rsp
Enter SYS user password: 
         
Enter SYSTEM user password: 
         
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
57% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
74% complete
85% complete
96% complete
100% complete
Look at the log file "/oracle/app/oracle/cfgtoollogs/dbca/orcl11g/orcl11g.log" for further details.

建库完毕之后执行命令查看实例进程在不在:

ps -ef|grep ora_|grep -v grep

查看监听状态:

lsnrctl status

登录数据库查看实例状态:

sqlplus / as sysdba

select status from V$instance;

[oracle@cainiaoke fast_recovery_area]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 4 17:41:08 2021

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select status from V$instance;

STATUS
------------
OPEN

SQL> 

 

15,通过IP连接数据库(在oracle用户下操作)

sqlplus /nolog    #登录oracle数据库控制台

conn / as sysdba   #用管理员权限登录数据库

select name from v$database;   #查看当前数据库名

select instance_name from v$instance;   #查看当前实例名

我们知道用sqlplus命令登录数据库需要  用户   密码   IP    端口   实例名

实例名用上面最后一条命令可以查出

端口在  $ORACLE_HOME/network/admin/tnsnames.ora   里面

IP我们也可以添加在 $ORACLE_HOME/network/admin/tnsnames.ora  这个里面,将里面  HOST=后面的主机名换成本机的IP,并确认  $ORACLE_HOME/network/admin/listener.ora 里面 HOST=  内容为主机名

用户和密码我们可以登录数据库进行创建   create user test identified by abcd1234;

给用户授权举例如下    grant create session to test; 不受此权限的话sqlplus都连上不   回收权限举例如下:revoke create table from test;

重启数据库:

停监听:lsnrctl stop

停数据库:sqlplus / as sysdba               shutdown immediate

开启监听:lsnrctl start

启动数据库:sqlplus / as sysdba                 startup

此时你可以使用   sqlplus test/[email protected]/kehana    登录数据库

如果重启机器发现数据库登不上了并且报错  ORA-27101:shared memory realm does not exis  有可能是因为数据库非正常关闭导致的,可以直接startup启动一下,或者startup force

 

oracle重启报错如下:

SQL> shutdown immediate
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

我是直接revocer某个时间点,命令如下:

SQL> recover database until time '2021-02-06 12:12:12';
Media recovery complete.

在执行startup:

SQL> startup
ORACLE instance started.

Total System Global Area 1603411968 bytes
Fixed Size                  2213776 bytes
Variable Size             402655344 bytes
Database Buffers         1191182336 bytes
Redo Buffers                7360512 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

有个报错说必须要选择这俩LOG中的一个open,那我们就open一下:

SQL> alter database open resetlogs;

Database altered.

现在在执行shutdown immediate     和  startup就OK了

再看下监听状态就有实例挂在上面了

[oracle@cainiaoke admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 18-FEB-2021 11:00:48

Copyright (c) 1991, 2009, 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.1.0 - Production
Start Date                18-FEB-2021 10:42:46
Uptime                    0 days 0 hr. 18 min. 2 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/app/oracle/product/11.2.0/client/network/admin/listener.ora
Listener Log File         /oracle/app/oracle/diag/tnslsnr/cainiaoke/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cainiaoke)(PORT=1521)))
Services Summary...
Service "kehana" has 1 instance(s).
  Instance "kehana", status READY, has 1 handler(s) for this service...
Service "kehanaXDB" has 1 instance(s).
  Instance "kehana", status READY, has 1 handler(s) for this service...
The command completed successfully

查看连接oracle数据库的连接信息

1:查看当前自己登录的oracle数据库的信息

SELECT USER,SID,SERIAL#,UTL_INADDR.GET_HOST_ADDRESS AS HOST,SYS_CONTEXT('USERENV','IP_ADDRESS') AS LOCAL,SYSDATE FROM V$SESSION WHERE AUDSID=SYS_CONTEXT('USERENV','SESSIONID');

2:查看每个oracle数据库用户的连接总数

select username,count(username) from v$session where username is not null group by username;

3:获取当前连接数据库的客户端信息(IP等)

首先创建触发器trigger : 

create or replace trigger on_logon_trigger after logon on database
begin
    dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
end;
/

创建完触发器之后再去查看连接数据库的客户端IP:

select sid,serial#,username,program,machine,client_info
from v$session
where username is not null
order by username,program,machine;

4:杀掉当前连接数据库的进程

利用上一步的命令我们可以看到目前哪些服务进程在连着数据库,或者使用下面这条命令更能直观的显示

select username,sid,serial# from v$session where username = 'HJGL';      #username换成自己的,注意大小写

上一条命令可以看到  SID 和 SERIAL#  这俩字段下的值

alter system kill session 'SID,SERIAL#';       干掉连着的服务进程

5:批量杀掉连接数据库的服务进程

select 'alter system kill session '''||sid||','||serial#||''';' from v$session where username='HJGL';   #这条命令是将select 和 alter结合在一起

 

设置oracle可以远程连接

主要是更改俩配置文件

1:vi $ORACLE_HOME/network/admin/listener.ora

添加如下内容(根据自己的文件来修改)我的实例名以及库名都是kehana

[oracle@cainiaoke admin]$ cat listener.ora 
# listener.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/client/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = kehana)
      (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/client)
      (SID_NAME = kehana)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.190.128)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /oracle/app/oracle

2:vi $ORACLE_HOME/network/admin/tnsnames.ora

添加如下内容(根据自己的文件来修改)

[oracle@cainiaoke admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /oracle/app/oracle/product/11.2.0/client/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_KEHANA = 
  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.190.128)(PORT = 1521))

KEHANA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.190.128)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = kehana)
    )
  )

然后就可以使用sqldeveloper或者navicat连接数据库了

如果navicat连接数据库报错  ORA-28547:connection to server failed, probable Oracle Net admin error   或者   oracle library is not loaded

请之oracle官网下载客户端 instant client    https://www.oracle.com/database/technologies/instant-client/downloads.html  

CentOS-7 静默安装 oracle11g_第1张图片

根据自己的系统位数来下载,或者根据你navicat的位数来下载,

CentOS-7 静默安装 oracle11g_第2张图片

有些人说只有下载32位的才可以,不好意思,我的机器只认64位的,32位的报错   oracle library is not loaded   所以32的如果报错就下载64的

下载完最好解压放在和navicat一起,有人说随便放-那我放在桌面第二天就被我一不注意删掉了是不是还得重新下,所以做事儿不要太随便

放好了之后打开navicat--工具--选项--环境,选择你刚刚解压出的那个  oci.ddl  然后关掉navicat重新打开,这个时候就不会报错了

你可能感兴趣的:(CentOS-7 静默安装 oracle11g)