打算在云服务器上装oracle服务,以前DBA美眉都是在图形化界面下安装,这次抓瞎了。赶紧上网查查,静默安装可以解决问题。于是乎赶紧开始部署,过程如下。
安装环境:
操作系统:CentOS 7
内存:11G(11851M)
硬盘:128G
oracle版本 11g


1、准备oracle 安装包 linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip


2、检查本机依赖包,没找到的用 yum install ****** 命令安装
rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel


3、创建所需的操作系统组和用户
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
设置oracle用户密码
passwd oracle


4、修改内核参数
vi /etc/sysctl.conf 在后面追加下面配置
#Oracle
kernel.sem = 250 32000 100 128
kernel.shmmax = 2147483648(这里配置物理内存的一半,单位是字节。比如物理内存是16G,这个值就是8Gx1024x1024x1024=1073741824)
kernel.shmmni = 4096
kernel.shmall = 2097152(这里配置物理内存的四分之一,单位是k。比如物理内存是16G,这个值就是2G*1024*1024=2097152)
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 8388608
net.core.wmem_default = 4194304
net.core.wmem_max = 4194304
fs.aio-max-nr = 1048576
保存后执行 /sbin/sysctl -p 命令,使修改生效。


5、修改用户限制
vi /etc/security/limits.conf 在后面追加下面配置
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
vi /etc/pam.d/login 在后面追加下面配置
session required /lib/security/pam_limits.so
session required pam_limits.so
vi /etc/profile 在配置文件结尾处(unset i 和 unset -f pathmunge 之前)追加下面配置
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 命令,使修改生效。


6、创建安装目录,并修改目录所有者
mkdir -p /usr/oracle
chown -R oracle:oinstall /usr/oracle
chmod -R 775 /usr/oracle


7、创建/etc/oraInst.loc文件
vi /etc/oraInst.loc 在里面写入下面配置
nventory_loc=/usr/oracle/oraInventory
inst_group=oinstall
保存后修改文件权限
chown oracle:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc


8、设置oracle环境变量
用ocacle用户登录
su - oracle
vi ~/.bash_profile 在后面追加下面配置
export ORACLE_BASE=/usr/oracle
export ORACLE_SID=orcl(这里是用户自己定义的数据库名称,后面就不能再改了)
保存后执行 source /home/oracle/.bash_profile 命令,使修改生效。
执行 env 命令,检查环境变量。


9、把前面准备的数据库安装文件移动到 /home/oracle/


10、解压oracle安装文件
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
解压缩后的安装文件在 /home/oracle/database 目录


11、复制响应文件模板
创建 /home/oracle/ 目录下的 etc 目录
mkdir etc
复制响应文件
cp /home/oracle/database/response/* /home/oracle/etc/
设置响应文件权限
su - root
chmod 700 /home/oracle/etc/*.rsp


12、静默安装Oracle软件
12.1 登陆 oracle 用户
su - oracle
12.2 vi /home/oracle/etc/db_install.rsp 修改安装Oracle软件的响应文件,这个环节其实就是图形化安装中的各种选项和“下一步”,不过静默安装要在配置文件里提前配置好。具体配置如下:
oracle.install.option=INSTALL_DB_SWONLY // 安装类型
ORACLE_HOSTNAME=t91 // 主机名称(hostname查询,这里要注意,主机名要在 /etc/hosts 文件中配置好ip对应关系,否则安装会报错)
UNIX_GROUP_NAME=oinstall // 安装组
INVENTORY_LOCATION=/usr/oracle/oraInventory //INVENTORY目录(不填就是默认值)
SELECTED_LANGUAGES=en,zh_CN,zh_TW // 选择语言
ORACLE_HOME=/usr/oracle/product/11.2.0/db_1 // oracle_home
ORACLE_BASE=/usr/oracle // oracle_base
oracle.install.db.InstallEdition=EE // oracle版本
oracle.install.db.isCustomInstall=false //自定义安装,否,使用默认组件
oracle.install.db.DBA_GROUP=dba // dba用户组
oracle.install.db.OPER_GROUP=oinstall // oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl //globalDBName(这里要和第8步配置的sid一致)
oracle.install.db.config.starterdb.SID=orcl //SID(这里要和第8步配置的sid一致)
oracle.install.db.config.starterdb.memoryLimit=81920 //自动管理内存的内存(M)
oracle.install.db.config.starterdb.password.ALL=****** //设定所有数据库用户使用同一个密码
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false(手动写了false)
DECLINE_SECURITY_UPDATES=true //设置安全更新(貌似是有bug,这个一定要选true,否则会无限提醒邮件地址有问题,终止安装。PS:不管地址对不对)
12.3 保存后执行 cd database 命令,进入 /home/oracle/database/ 目录开始静默安装。

./runInstaller -silent -responseFile /home/oracle/etc/db_install.rsp (我曾经在安装时一直报错,SEVERE: [FATAL] [INS-13013] 目标环境不满足一些必需要求。后来在请求参数里增加了 -ignorePrereq 后安装成功了 ./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp)

【补充一个异常:安装时如果提示swap空间为0M,需要做如下配置:

dd if=/dev/zero of=/home/swapfile bs=1M count=4096
mkswap /home/swapfile
swapon /home/swapfile
vi /etc/fstab
/home/swapfile swap swap defaults 0 0

安装中,如果提示[WARNING]不必理会,此时安装程序仍在进行,如果出现[FATAL],则安装程序已经停止了。
安装日志信息在 /usr/oracle/oraInventory/logs/ 目录下。
installActions2016-07-14_10-49-36AM.log安装过程
oraInstall2016-07-14_10-49-36AM.err错误日志
oraInstall2016-07-14_10-49-36AM.out输出日志
12.4 当 oraInstall2016-07-14_10-49-36AM.out 文件出现下面信息,就表示安装完成了
/usr/oracle/product/11.2.0/db_1/root.sh
要执行配置脚本, 请执行以下操作:
1. 打开一个终端窗口
2. 以 "root" 身份登录
3. 运行脚本
4. 返回此窗口并按 "Enter" 键继续
Successfully Setup Software.
12.5 执行 su - root 命令,用 root 用户登录
/usr/oracle/product/11.2.0/db_1/root.sh
12.6 执行 su - oracle 命令,用 oracle 用户登陆
vi ~/.bash_profile 在后面追加下面配置
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=.:${PATH}:$HOME/bin:$ORACLE_HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/JRE/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export LIBPATH=${CLASSPATH}:$ORACLE_HOME/lib:$ORACLE_HOME/ctx/lib
export ORACLE_OWNER=oracle
export SPFILE_PATH=$ORACLE_HOME/dbs
export ORA_NLS10=$ORACLE_HOME/nls/data
保存后执行 source /home/oracle/.bash_profile 命令,使修改生效。
执行 env 命令,检查环境变量。


13、到这里,oracle 11g 的数据库实例就算是装好了,接下来配置数据库实例的基本参数文件
cd $ORACLE_HOME/dbs (实际这个目录是/usr/oracle/product/11.2.0/db_1/dbs)
这时目录下有 init.ora 文件,执行下面命令,会创建一个新的基本参数配置文件
cat init.ora | grep -V ^# | grep -V ^$ | > init$ORACLE_SID.ora
新创建的文件名是 init(sid).ora,比如我在第8步配置的是orcl,那么这个文件名就是 initorcl.ora
这个新创建的文件是个空文件,需要手动把 init.ora 里面的内容复制过来,把内容里面的
<ORACLE_BASE> 全部改成绝对地址 /usr/oracle
db_name='【sid】'(这里的sid要和第8步配置的sid一致) 
audit_file_dest='/usr/oracle/admin/【sid】/adump'(这里的sid要和第8步配置的sid一致) 
并用 oracle 用户手动创建 
/usr/oracle/admin/【sid】/adump(这里的sid要和第8步配置的sid一致) 
/usr/oracle/flash_recovery_area
/usr/oracle/oradata


14、执行命令 vi /home/oracle/script.sql 编辑sql脚本文件,内容如下:
CREATE DATABASE orcl(这里要和第8步配置的sid一致)
USER SYS IDENTIFIED BY sys 
USER SYSTEM IDENTIFIED BY system 
LOGFILE 
GROUP 1 ('/usr/oracle/oradata/redo01.log') SIZE 1024M, 
GROUP 2 ('/usr/oracle/oradata/redo02.log') size 1024m, 
GROUP 3 ('/usr/oracle/oradata/redo03.log') size 1024m, 
GROUP 4 ('/usr/oracle/oradata/redo04.log') size 1024m, 
GROUP 5 ('/usr/oracle/oradata/redo05.log') size 1024m
MAXLOGFILES 5 
MAXLOGMEMBERS 5 
MAXLOGHISTORY 200 
MAXDATAFILES 10000
MAXINSTANCES 1 
CHARACTER SET AL32UTF8 
NATIONAL CHARACTER SET AL16UTF16 
datafile '/usr/oracle/oradata/system01.dbf' size 2048M  REUSE
EXTENT MANAGEMENT LOCAL
sysaux datafile '/usr/oracle/oradata/sysaux01.dbf' size 2048M REUSE
default temporary tablespace temp 
tempfile '/usr/oracle/oradata/temp01.dbf' size 2048M REUSE
undo tablespace UNDOTBS1 
datafile '/usr/oracle/oradata/undotbs01.dbf' size 4096M  REUSE
AUTOEXTEND off
default tablespace DATA
datafile '/usr/oracle/oradata/data01.dbf' size 8192M  REUSE
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;




15、执行命令 sqlplus / as sysdba 登陆 oracle 数据库
登陆成功后执行 startup nomount; 启动数据库,注意必须包含有分号,否则oracle不执行。


16、@/home/oracle/script.sql; 执行第14步配置的脚本
如果这里报错:
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-00200: control file could not be created
ORA-00202: control file: '/usr/oracle/product/11.2.0/db_1/dbs/ora_control1'
ORA-27038: created file already exists
Additional information: 1
就说明此脚本之前执行过,但是失败了。删除掉 /usr/oracle/product/11.2.0/db_1/dbs/ 目录下的 ora_control1 和 ora_control2 再重新执行脚本即可。
这个脚本执行过程很长,而且没有任何提示,等显示 Database created. 就成功了。


17、创建数据字典和pl/sql包
@/usr/oracle/product/11.2.0/db_1/rdbms/admin/catalog.sql;
@/usr/oracle/product/11.2.0/db_1/rdbms/admin/catproc.sql;
@/usr/oracle/product/11.2.0/db_1/rdbms/admin/utlrp.sql;
conn system/system;
@/usr/oracle/product/11.2.0/db_1/sqlplus/admin/pupbld.sql;
前两个脚本执行过程很长。
创建完成后先执行 exit 命令退出,然后再执行 sqlplus / as sysdba 登陆数据库;
然后执行 shutdown immediate; 命令关闭数据库;
再执行 startup; 启动oracle数据库。先退出在登陆是因为conn system/system之后,当前用户就变成了system,而system没有关闭数据库权限。


18、配置监听文件
18.1、执行 vi /usr/oracle/product/11.2.0/db_1/network/admin/listener.ora 命令,插入内容如下:
# listener.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
 (DESCRIPTION_LIST =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 【计算机名】)(PORT = 1521))(这里的HOST要填本机的计算机名)
   )
 )
ADR_BASE_LISTENER = /app/oracle
18.2、执行 vi /usr/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora 命令,插入内容如下:
# tnsnames.ora Network Configuration File: /app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
QXT =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 【计算机名】)(PORT = 1521))(这里的HOST要填本机的计算机名)
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = orcl)(这里要填写第8步定义的sid)
   )
 )


19、启动监听
执行命令 lsnrctl start 启动监听
提示 The command completed successfully 执行成功


20、创建用户
执行命令 sqlplus / as sysdba 登陆 oracle 数据库
执行下面语句,创建用户
create user qxt_user identified by ********; 
grant connect, resource to qxt_user;
grant create session to qxt_user;
执行下面语句,创建表空间
create tablespace qxt_user_DATA datafile '/usr/oracle/oradata/qxt_user001.dbf' size 16G;
执行下面语句,指定表空间
alter user qxt_user default tablespace qxt_user_DATA temporary tablespace TEMP;

21、设置密码期限
执行下面语句,使密码永不过期。这个相当坑人,oracle密码默认有效期180天,好几次数据库因为这个出问题。程序链接不上。
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

22、接下来是设置一下oracle的权限和属性,都是这几年踩过的坑:
开放调度作业权限: grant create job to qxt_user;
开放表空间权限:grant select any dictionary to qxt_user;

查看游标数:show parameter open_cursors;  
修改游标述:alter system set open_cursors=1000 scope=spfile;
如果上述修改失败 执行:alter system set open_cursors=1000;
需要重启数据库服务

把自己所有的权限都给用户qxt_user。 
grant all privileges to QXT_USER;
grant execute on sys.dbms_job to QXT_USER;

UNDOTBS表空间,主要频繁执行update语句也会很快让空间饱和,所以可以考虑关闭undo retention的自动优化特性,即将数据库参数_undo_autotune设置为FALSE
执行:Alter system set "_undo_autotune" = false;

避免system空间不足的报错,可关闭审计功能,并重启数据库
SQL>alter system set audit_trail=none scope=spfile;
查看
SQL> show parameter audit_trail;
如果执行上面语句,报下面的错误:
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
重新创建一下spfile
create spfile from pfile;
重启数据库,即可解决此错误

修改Oracle最大连接数
a、查询目前连接数:show parameter processes;
b、修改连接数:alter system set processes=1000 scope=spfile;


至此全部完成,用navicat链接一下,正常。最后提醒一下自己,不要忘了开放防火墙的1521端口。

【补充】

有时候需要linux开机后自动启动oracle,按下面方式执行就可以:

1、在oracle目录下创建一个sh脚本文件,假设目录是/home/oracle,就在这个目录下创建一个startoracle.sh,名字随便。

2、编辑/home/oracle/startoracle.sh这个刚创建的文件,内容如下:

#!/bin/bash
lsnrctl start
sqlplus / as sysdba << EOF
startup;
exit;
EOF

编辑完成后保存。

3、执行下面命令,给/home/oracle/startoracle.sh这个脚本可执行权限。

chmod +x /home/oracle/startoracle.sh

4、执行下面命令,把这个文件的执行权限给oracle用户。

chown oracle:oinstall /home/oracle/startoracle.sh

5、编辑/etc/rc.local命令,在里面上下面这行:

su - oracle -c "/home/oracle/startoracle.sh"

6、保存退出后执行chmod +x /etc/rc.d/rc.local使开机启动生效。

这样就完成了开机自动启动。没想到时隔十年,会再来编辑这个文档,感慨万千。人生际遇无偿,但终归是个轮回。愿所有人欢喜自在,此刻我才明白老领导qq昵称“自在”的境界,我的格局整整落后人家20年。

Logo

更多推荐