[CentOS] Oracle 11g安装部署
一.软件版本
- oracle版本:
- linux.x64_11gR2_database_1of2.zip
- linux.x64_11gR2_database_2of2.zip
操作系统:CentOS-7-x86_64-DVD-1804.iso
内存:8G
磁盘:128G
- 软件下载网址
- Oracle安装包下载:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html
- 依赖包下载:https://pkgs.org/
二.安装前准备
- 使用 root 用户登录系统进行操作
- # 表示注释或root用户执行
- $ 表示除root以外的用户
- SQL> 表示sqlplus操作
1)禁用防火墙
- 如果当前机器未安装 iptables 防火墙,则跳过
#--检查是否开启
# systemctl status iptables.service
- 未安装提示
[comuser@localhost ~]$ systemctl status iptables.service
Unit iptables.service could not be found.
- 关闭 iptables 防火墙
#--重启后生效
#--开启
# systemctl enable iptables.service
#--关闭 (== 当前操作建议使用 ==)
# systemctl disable iptables.service
#--即时生效,重启后失效
#--开启
# systemctl start iptables.service
#--关闭
# systemctl stop iptables.service
2)禁用 SELinux
- 编辑 /etc/selinux/config 文件,修改 SELINUX=disabled
# vim /etc/selinux/config
#--原内容
SELINUX=enforcing
#--修改后
SELINUX=disabled
- 重启机器
3)安装依赖包
- Oracle官网文档要求安装的依赖包
https://docs.oracle.com/cd/E11882_01/install.112/e47689/pre_install.htm#LADBI1111
- 运行命令时,要换行(可先拷贝到txt,把换行删除)
-
- 以下命令是离线安装,请先下载 PRM 依赖包;在线安装需要改为 yum 命令
# rpm -ivh kernel-headers-*.x86_64.rpm
# rpm -ivh zlib-devel-*.x86_64.rpm
# rpm -Uvh libgcc-*.x86_64.rpm libgomp-*.x86_64.rpm binutils-*.x86_64.rpm libstdc++-*.x86_64.rpm
# rpm -Uvh nspr-*.x86_64.rpm nss-softokn-freebl-*.x86_64.rpm nss-util-*.x86_64.rpm
# rpm -Uvh glibc-common-*.x86_64.rpm glibc-*.x86_64.rpm elfutils-libs-*.x86_64.rpm elfutils-*.x86_64.rpm elfutils-libelf-*.x86_64.rpm
# rpm -Uvh sysstat-*.x86_64.rpm lm_sensors-libs-*.x86_64.rpm
# rpm -Uvh libxcb-*.x86_64.rpm libxcb-devel-*.x86_64.rpm
# rpm -ivh libX11-common-*.noarch.rpm
# rpm -Uvh libX11-*.x86_64.rpm libX11-devel-*.x86_64.rpm
# rpm -ivh elfutils-libelf-devel-*.x86_64.rpm
# rpm -ivh libmpc-*.x86_64.rpm
# rpm -ivh libstdc++-devel-*.x86_64.rpm cpp-*.x86_64.rpm
# rpm -ivh gcc-*.x86_64.rpm gcc-c++-*.x86_64.rpm
# rpm -ivh glibc-devel-*.x86_64.rpm glibc-headers-*.x86_64.rpm
# rpm -ivh nss-softokn-freebl-*.i686.rpm glibc-*.i686.rpm glibc-devel-*.i686.rpm
# rpm -ivh unixODBC-*.x86_64.rpm unixODBC-devel-*.x86_64.rpm
# rpm -ivh libtool-ltdl-*.x86_64.rpm libXext-*.x86_64.rpm mpfr-*.x86_64.rpm libXau-*.x86_64.rpm
# rpm -ivh libXp-*.x86_64.rpm compat-libstdc++-*.x86_64.rpm libaio-devel-*.x86_64.rpm pdksh-*.x86_64.rpm
4)创建Oracle用户组和用户
- 创建 用户组
oinstall
# groupadd oinstall
- 创建用户组
dba
# groupadd dba
- 新增用户
orauser
,并加入用户组oinstall
和dba
# useradd -g oinstall -g dba -m orauser
- 测试用户
orauser
是否创建成功
# groups orauser
# id orauser
- 修改
orauser
的密码,用于CentOS 登录使用
# passwd orauser
5)配置Oracle用户可暂时拥有root权限
- 编辑 /etc/sudoers文件
# vim /etc/sudoers
- 找到
root ALL=(ALL) ALL
- 在下一行写入
orauser ALL=(ALL) ALL
6)配置系统内核参数
- 编辑
/etc/sysctl.conf
文件
# vim /etc/sysctl.conf
- 写入以下内容:
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
#--设置最大打开文件数
fs.file-max = 6815744
fs.aio-max-nr = 1048576
#--共享内存的总量,8G内存设置:2097152*4k/1024/1024
kernel.shmall = 2097152
#--最大共享内存的段大小
kernel.shmmax = 2147483648
#--整个系统共享内存端的最大数
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
#--可使用的IPv4端口范围
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
- 执行当前配置
# sysctl -p
7)配置资源限制文件
对 orauser 用户设置限制,提高软件运行性能
- 编辑
/etc/security/limits.conf
文件
# vim /etc/security/limits.conf
- 写入以下内容:(格式:username|@groupname type resource limit)
orauser soft nproc 2047
orauser hard nproc 16384
orauser soft nofile 1024
orauser hard nofile 65536
8)修改linux发行版本
-
由于 Oracle 11g 发行时,CentOS7并未发行,所以,需要修改linux发行版本,应对Oracle安装时的检测
-
编辑
/etc/redhat-release
文件
# vim /etc/redhat-release
- 写入以下内容:
#--原文件内容
CentOS Linux release 7.5.1804 (Core)
#--修改后文件内容
redhat-7
9)创建Oracle安装文件夹和数据存放文件夹
#--创建文件夹
# mkdir /opt/oracle11g
# mkdir /opt/oracle11g/oracle
# mkdir /opt/oracle11g/oraInventory
# mkdir /opt/oracle11g/inspkg
#-- 修改目录及子目录所有文件的拥有者
# chown -R orauser:oinstall /opt/oracle11g
10)配置Oracle用户环境变量
- 编辑
/home/orauser/.bash_profile
文件
$ vim /home/orauser/.bash_profile
- 写入以下内容:(请根据实际环境情况,修改安装路径)
#--oracle数据库安装目录
export ORACLE_BASE=/opt/oracle11g/oracle
#--oracle数据库路径
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
#--oracle启动数据库实例名
export ORACLE_SID=orcl
#--xterm窗口模式安装
export ORACLE_TERM=xterm
#--添加系统环境变量
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
#--添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
#--防止安装过程出现乱码
export LANG=en_US
#--设置Oracle客户端字符集,必须与Oracle安装时设置的字符集保持一致
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# 解决窗口异常的问题(小条边框或不完整导致不能点击yes|no)
export JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType
- 执行 source 命令,使文件生效
$ source .bash_profile
三.安装 Oracle,并进行相关配置
1)注销root用户
- 注销 root 用户,使用 orauser 重新登录系统
- 注意不是运行 # su orauser 命令
2)解压缩Oracle安装文件
- 解压缩Oracle安装文件
# unzip linux.x64_11gR2_database_1of2.zip -d /opt/oracle11g/inspkg/
# unzip linux.x64_11gR2_database_2of2.zip -d /opt/oracle11g/inspkg/
3)开始安装
- 进入解压目录
$ cd /opt/oracle11g/inspkg/database
- 运行以下命令:
$ ./runInstaller -ignoreSysPrereqs
4)安装过程
-
1.跳过邮箱设置
-
2.选择 Create and configure a database
-
3.选择 Desktop Class
-
4.确认安装路径
-
- OSDBA Group(默认):
dba
- OSDBA Group(默认):
-
- 配置实例名、管理员
sys
的密码
- 配置实例名、管理员
-
5.确认 oraInventory 目录
-
6.勾选 Ignore all 复选框
-
7.确认配置信息后,点击 finish 按钮(如果Oracle安装过程有出错,可以直接忽略,点击 Continue )
-
- 等待 Database Configuration Assistant 窗口配置数据库
-
- Database Configuration Assistant 配置完成后,点击 OK
-
- 稍等会弹出 Execute Configuration scripts 窗口,点击 OK 键
-
- 点击 Oracle Universal Installer: End of Installation 窗口的Exit 键,弹出是否退出的窗口,点击 Yes 键
5)简单的测试
#--输出当前实例
$ echo $ORACLE_SID
#--多个实例时,指定当前实例
$ export ORACLE_SID=orcl
#--启动监听
$ lsnrctl start
#--查看监听状态
$ lsnrctl status
#--启动sqlplus
$ sqlplus /nolog
#--dba登录
SQL> conn / as sysdba
#--启动当前实例
SQL> startup
#--检查当前实例是否启动成功(出现一排的ora_XXX_实例名,说明启动成功)
$ ps -ef|grep ora_
四、设置开机自启动
- 使用用户 root 进行登录系统
1)配置 /etc/oratab
文件(如果没有,新建即可)
# vim /etc/oratab
- 找到以下内容:
orcl:/opt/oracle11g/oracle/product/11.2.0/db_1:N
- 改为:
orcl:/opt/oracle11g/oracle/product/11.2.0/db_1:Y
2)配置 /etc/rc.d/rc.local
文件
# vim /etc/rc.d/rc.local
- 写入以下内容:(orauser=用户名,后面是安装路径)
su orauser -lc "/opt/oracle11g/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su orauser -lc /opt/oracle11g/oracle/product/11.2.0/db_1/bin/dbstart
- 设置
rc.local
的可执行权限
# chmod +x /etc/rc.d/rc.local
- 重启机器(启动后,使用上面命令检查)
五、修改Oracle配置
1)修改Oracle监听端口
- 停止Oracle监听
#--停止监听
$ lsnrctl stop
#--查看监听状态
$ lsnrctl status
#--查看指定端口状态
$ netstat -an | grep 15215
#--启动监听
$ lsnrctl start
- 修改
listener.ora
监听配置文件
#--端口由 1521 改为 15215 | $ORACLE_HOME需要配置环境变量
$ vim $ORACLE_HOME/network/admin/listener.ora
#--原配置
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
#--修改后
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 15215))
)
)
- 登录 sqlplus,修改 system 表的 local_listener 参数,设置 port=15215
#--启动sqlplus
$ sqlplus /nolog
#--dba登录
SQL> conn / as sysdba
#--查询 local_listener 属性的Value是否为空字符串
SQL> show parameter local_listener;
#--修改 local_listener 属性
SQL> alter system set local_listener='(address = (protocol = tcp)(host = localhost)(port = 15215))';
2)重启实例
#--多个实例时,切换到需要操作的实例
$ export ORACLE_SID=orcl
#--进入sqlplus控制台
$ sqlplus /nolog
#--以管理员身份登录
SQL> conn / as sysdba
#--停止数据库实例
SQL> shutdown abort
#--启动实例
SQL> startup
#--退出sqlplus
SQL> exit
3)表空间、用户、角色权限的管理
-
oracle 默认表空间 system
-
oracle 默认临时表空间 temp
-
创建表空间
#--登录sqlplus,查询数据文件位置
SQL> select name from v$datafile;
#--创建临时表空间,temp_orcl 表示临时表空间名称
SQL> create temporary tablespace temp_orcl tempfile '/opt/oracle11g/oradata/orcl/temp_orcl.dbf' size 512M autoextend on next 128M maxsize unlimited extent management local;
#--创建表空间,db_orcl 表示表空间名称
SQL> create tablespace db_orcl logging datafile '/opt/oracle11g/oradata/orcl/db_orcl.dbf' size 512M autoextend on next 128M maxsize unlimited extent management local;
- 创建用户,并指定表空间信息(user后面接
用户名
,identified后面接密码
,db_orcl表示表空间,temp_orcl表示临时表空间)
#--创建用户
SQL> create user testuser identified by test123 account unlock default tablespace db_orcl temporary tablespace temp_orcl;
#--级联删除,cascade表示如果用户testuser下有其它对象,也会一并删除(强制删除)
SQL> drop user testuser cascade
#--修改用户testuser的密码
SQL> alter user testuser identified by 123456;
- 配置角色权限
#--把connect,resources角色赋予用户testuser
SQL> grant connect,resource to testuser;
#--把dba角色赋予用户testuser
SQL> grant dba to testuser;
#--撤销角色
SQL> revoke connect,resource to testuser
4)导入数据
#-- 用户=testuser,密码=test123,监听端口=15215
$ imp testuser/test123@localhost:15215/db_orcl file=/home/orauser/upload/test.dmp full=y
- 生成drop语句(或者删除用户,重新创建)
SQL> select 'drop table '||table_name||';' from cat where table_type='TABLE';
5)数据备份
-
建议使用Oracle用户(具有sudo权限)
-
查询当前数据库字符集,避免备份后乱码情况(选其一)
SQL> select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
- 创建相关备份目录(根据实际情况设置)
#--创建数据备份目录,`-p`=创建多级目录
# mkdir -p /opt/oracle11g/backup
#--创建备份脚本目录
# mkdir -p /opt/oracle11g/backup/shell
#--创建导出数据日志目录
# mkdir -p /opt/oracle11g/backup/logs
- 创建备份脚本文件
# vim /opt/oracle11g/backup/shell/orabak.sh
-
orabak.sh
脚本内容如下:1. Oracle安装路径、备份路径、Oracle用户和密码、实例名等信息需要根据情况进行修改
2. 注释的脚本是,每次备份数据库时自动删除30天之前的数据库文件
3. 脚本中使用
NLS_LANG
设置导出数据库文件字符集
#!/bin/sh
export ORACLE_BASE=/opt/oracle11g
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export DATA_DIR=/opt/oracle11g/backup
export LOGS_DIR=/opt/oracle11g/backup/log
#export DELTIME=`date -d "30 days ago" +%Y%m%d`
export BAKUPTIME=`date +%Y%m%d%H%M%S`
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
mkdir -p $DATA_DIR
mkdir -p $LOGS_DIR
echo "Starting bakup..."
echo "Bakup file path $DATA_DIR/$BAKUPTIME.dmp"
exp testuser/123456@localhost/orcl file=$DATA_DIR/ORCL$BAKUPTIME.dmp log=$LOGS_DIR/ORCL$BAKUPTIME.log
#echo "Delete the file bakup before 30 days..."
#rm -rf $DATA_DIR/ORCL$DELTIME*.dmp
#rm -rf $LOGS_DIR/ORCL$DELTIME*.log
#echo "Delete the file bakup successfully. "
echo "Bakup completed."
- 修改脚本文件的可执行权限,并测试脚本是否可执行
#--修改脚本文件权限
# chmod 777 dbbak.sh
#--测试脚本
# cd /opt/oracle11g/backup/shell
# ./orabak.sh
- 设置定时任务
# vim /etc/crontab
-
配置内容如下:
1. 配置内容格式: 时间 + 执行操作的系统用户 + 脚本文件的全路径
2. 下面配置表示凌晨1点执行数据库备份脚本
00 1 * * * orauser /opt/oracle11g/backup/shell/orabak.sh
六、其它
1)ORA-01157 / ORA-01110 错误
- 表空间创建错误后,删除了表空间的文件,导致 Oracle 不能启动,错误提示如下:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: ‘/opt/oracle11g/oracle/oradata/nhswksh/db_nhswksh.dbf’
- 解决方法:
#--多个实例时,切换到需要操作的实例
$ export ORACLE_SID=orcl
$ sqlplus /nolog
SQL> conn / as sysdba
SQL> alter database datafile 6 offline drop;
SQL> alter database open;
SQL> select ts#,file#,name from v$datafile;
SQL> select tablespace_name,status from dba_tablespaces;
#-- 表空间名称:temp_orcl
SQL> drop tablespace temp_orcl including contents and datafiles;
SQL> shutdown immediate
SQL> startup