服务器系统为centos7.9 64位,物理内存大小为16GB,如果物理内存不一致的,请手动调整相关细节配置。
Oracle数据库的安装比较麻烦,但一般分为以下几个步骤:
- 下载Oracle
- 配置系统环境(过程最为复杂)
- 安装Oracle
- 防火墙等的配置
下载Oracle
下载
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
更新系统包。
# yum update -y
安装下载Oracle12C所需软件包
yum install -y binutils.x86_64 compat-libcap1.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc.i686 glibc.x86_64 glibc-devel.i686 glibc-devel.x86_64 ksh compat-libstdc++-33 libaio.i686 libaio.x86_64 libaio-devel.i686 libaio-devel.x86_64 libgcc.i686 libgcc.x86_64 libstdc++.i686 libstdc++.x86_64 libstdc++-devel.i686 libstdc++-devel.x86_64 libXi.i686 libXi.x86_64 libXtst.i686 libXtst.x86_64 make.x86_64 sysstat.x86_64 zip unzip sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
为Oracle创建一个用户组,名字是Oracle,并对该用户设置登录密码。
# groupadd oinstall
# groupadd dba
-g 设置的是用户的主用户组,记录在/etc/passwd中。
-G 设置的是用户附加组版,记录在/etc/group中。
这样做的意义在于:
1,当"usermod -g"切换到一个临时组,然后再切换回来的时候,不会把临时组的信息“遗留”在该用户设置中。
2,权限更加明细,在11g安装中的一步,就会提示sysdba和sysoper的区别,放在不同的组,可以有效的提高安全性。
新创建一个oracle用户,这初始属于oinstall组,且同时让他也属于dba组。
# useradd -g oinstall -G dba oracle
# passwd oracle
www.163.com
修改host
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 oracle12c
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 oracle12c
#外网ip
192.168.8.103 oracle12c
#不知道什么作用
192.168.159.129 oracle12c
将以下内容添加到/etc/sysctl.conf中。
vim /etc/sysctl.conf
#禁用包过滤功能
net.ipv4.ip_forward = 0
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0
#控制core文件的文件名是否添加pid作为扩展
kernel.core_uses_pid = 1
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 65536
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式16G*1024*1024*1024-1(字节)
kernel.shmmax = 17179869183
#所有内存大小(单位:页,1页 = 4Kb),计算公式(16G*1024*1024-1)/4KB (页)
kernel.shmall = 4194303
#系统范围内共享内存段的最大数量。该参数的默认值是 4096.此值也是在系统中可以启动的Oracle实例的最大数量,通常不需要更改,因为显然在生产环境下,一个服务器上同时启动的实例个数达不到这个数量.
kernel.shmmni = 4096
#250 SEMMSL max semaphores per array 信号集容纳最大信号数量
#32000 SEMMNS max semaphores system wide 所有信号的最大数量
#32 SEMOPM max ops per semop call 调用单个信号集中最大信号数量
#128 SEMMNI max number of arrays 信号集的最大值
kernel.sem = 250 32000 100 128
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启有选择的应答
net.ipv4.tcp_sack = 1
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1
#TCP读buffer
net.ipv4.tcp_rmem = 4096 131072 1048576
#TCP写buffer
net.ipv4.tcp_wmem = 4096 131072 1048576
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 65500
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 262144
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 2
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 2
# net.ipv4.tcp_tw_len = 1
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 30
#表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
net.ipv4.tcp_keepalive_time = 120
#对外连接端口范围
net.ipv4.ip_local_port_range = 9000 65000
#表示文件句柄的最大数量
fs.file-max = 6815744
fs.aio-max-nr = 1048576
打开该文件使用的指令是vim /etc/sysctl.conf。vim的基本使用方法在文末会有介绍。
接下来是使配置立即生效。
/sbin/sysctl -p
/sbin/sysctl -a
将以下内容添加到/etc/security/limits.conf 中。该内容是最Oracle用户的一些限制。
vim /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 10240
修改用户登录库文件
vim /etc/pam.d/login
在文件末尾添加下面2行内容
session required /lib64/security/pam_limits.so
session required pam_limits.so
解压Oracle到/stage目录中,如果没有的话可以自动创建。
unzip linuxx64_12201_database.zip -d /data/ttwis/ttwis_program/stage/
创建一些其他目录,分配权限。
mkdir -p /data/ttwis/ttwis_program/oracle/u01/app/oracle/product/12.2.0
mkdir -p /data/ttwis/ttwis_program/oracle/u01/app/oracle/oradata
mkdir -p /data/ttwis/ttwis_program/oracle/u01/app/oracle/inventory
mkdir -p /data/ttwis/ttwis_program/oracle/u01/app/oracle/fast_recovery_area::
mkdir -p /data/ttwis/ttwis_program/oracle/u01
mkdir -p /data/ttwis/ttwis_program/oracle/u02
chown -R oracle:oinstall /data/ttwis/ttwis_program/oracle/u01
chown -R oracle:oinstall /data/ttwis/ttwis_program/oracle/u02
chmod -R 775 /data/ttwis/ttwis_program/oracle/u01
chmod -R 775 /data/ttwis/ttwis_program/oracle/u02
配置Oracle用户环境变量
vim .bash_profile
# .bash_profile
# Get the aliases and functions
export PATH
TMPDIR=$TMP;
export TMPDIR
ORACLE_BASE=/data/ttwis/ttwis_program/oracle/u01/app/oracle;
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1;
export ORACLE_HOME
ORACLE_SID=orcl;
export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH;
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64;
export LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.UTF8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH NLS_LANG
export NLS_LANG=AMERICAN_AMERICA.UTF8
export LANG=en_US.UTF-8
source .bash_profile
NETWORKING=yes
HOSTNAME=oracle12c
修改用户登录环境变量
vim .profile
export PATH
TMPDIR=$TMP;
export TMPDIR
ORACLE_BASE=/data/ttwis/ttwis_program/oracle/u01/app/oracle;
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1;
export ORACLE_HOME
ORACLE_SID=orcl;
export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH;
export PATH
使修改的文件生效
source .profile
安装Oracle
环境配置
添加防火墙(不需要做,因为防火墙已经被永久关闭了)
firewall-cmd –zone=public –add-port=1521/tcp –add-port=5500/tcp –add-port=5520/tcp –add-port=3938/tcp –permanent
配置/etc/profile
vim /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
export JAVA_HOME=/data/ttwis/ttwis_program/java8
export JRE_HOME=/data/ttwis/ttwis_program/java8/jre
export NGINX_HOME=/usr/local/nginx/sbin
export MYSQL_HOME=/data/ttwis/ttwis_program/mysql-5.7.30
export MONGODB_HOME=/data/ttwis/ttwis_program/mongodb
export ORACLE_BASE=/data/ttwis/ttwis_program/oracle/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib:$NGINX_HOME:$MYSQL_HOME/lib:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$NGINX_HOME:$MYSQL_HOME/bin:$MONGODB_HOME/bin:$ORACLE_HOME/bin
source /etc/profile
安装Oracle数据库。在这里最好重启一下电脑。使用Oracle用户登录。在终端输入
cd /data/ttwis/ttwis_program/stage/database/
./runInstaller
1、第一步用来配置更新以及技术支持的,把勾去掉直接下一步就行
2、配置安装选项,这三个选项分别表示:①创建并配置一个新数据库,适用于新安装数据库的用户;②只安装数据库软件,适用于已有Oracle数据库数据用于数据迁移的;③升级已有数据库,适用于将老数据库升级成新数据库的用户。毫无疑问这里选择第一个选项。
3、第三步配置桌面版还是服务器版,桌面版是最小化配置,这里选择服务器版的配置。
4、第四步分布式网格配置,这里选择单实例服务器配置,如果要配置分布式服务的话可以参考安装文档,里面有详细的分布式服务安装过程。
5、选择高级安装
6、第七步选择数据库版本,这里选择企业版
7、选择安装路径,这个已经在环境变量里配置过了
8、这个Inventory Directory目录用于记录Oracle的清单信息的,清单信息中包括Oracle的安装路径等信息。这里也默认路径即可。
9、创建数据库的类型:
通用/事务处理:专为一般用途或交互较多的应用程序而设计。
数据仓库:对数据存储应用程序进行优化。
这里选择通用的就行。
10、配置数据库名,和Oracle服务ID号
注意数据库名一定要记住,以后进行程序开发会用到这个数据库名
11、这里需要配置一下字符集,将字符集设置成UTF-8,其他的不用修改(如果有特殊需求可以参考文档来配置)。
下面默认即可:
12、配置数据存储的(数据文件存储位置),默认的位置就是自己想存放的位置
13、配置数据备份
设置管理工具
14、配置账号密码,这里我将所有的默认用户统一使用相同的密码(如果密码太简单可能会报错,需要大小写数字都包含,需要精心设计一个密码)。
Ttwis8852
15、这一步用于配置数据库用户组的,只要安装前的配置工作完成了,这一步可以直接使用默认的。
16、这一步会检测交换分区大小、内核参数以及依赖包是否安装。只要前面准备工作都完成了,下面的错误可以直接忽略(比如它要求的软件包,我们的版本实际上比它要求的还高,所以这里的报错没必要理会它)。
17、对前面所有配置的一个总结,我们可以直接点击完成
18、安心的等待安装成功
/data/ttwis/ttwis_program/oracle/u01/app/oraInventory/orainstRoot.sh
/data/ttwis/ttwis_program/oracle/u01/app/oracle/product/12.2.0/dbhome_1/root.sh
第一行配置完成。
新建文件夹:
再次运行:
/data/ttwis/ttwis_program/oracle/u01/app/oracle/product/12.2.0/dbhome_1/root.sh
配置完成
等待,安装成功!
查看端口
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)
orclpdb
登录指令
sqlplus sys/dwh as sysdba;
查看oracle版本
select * from v$version;
启动数据库
startup
show con_name;
查看CDB$ROOT下所有的pdbs
select name , open_mode from v$pdbs;
select con_id, dbid, guid, name , open_mode from v$pdbs;
--v$pdbs为PDB信息视图,此处用了安装的时候的默认的可拔插的数据库ORCLPDB
alter session set container=ORCLPDB; --切换到ORCLPDB容器
alter session set container=LIVING_TJ;
alter session set container=LIVING_XIANJD;
关闭pdb
alter pluggable database orclpdb close;
alter pluggable database orclpdb open;
alter pluggable database LIVING_TJ open;
alter pluggable database LIVING_XIANJD open;
切换回CDB$ROOT
alter session set container=cdb$root;
打开SQL plus并且进行连接
sqlplus /nolog
使用超级管理员登录
CONN sys/change_on_install AS SYSDBA ;
创建c##ttwis 用户
CREATE USER c##ttwis IDENTIFIED BY Ttwis2098;
为用户授权
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO c##ttwis CONTAINER=ALL ;
设置用户使用的表空间
启动数据库
startup
--创建表空间
create tablespace LIVING_TJ datafile '/data/ttwis/ttwis_program/oracle/u01/app/oracle/oradata/orcl/orclpdb/LIVING_TJ.dbf' size 1024m autoextend on next 100m;
datafile 表对应的·数据文件
size表空间初始大小
autoextend on 自动增长,表空间满后,自动增长
next 一次自动增长的大小
创建数据库
dbca
查看Oracle 12c的版本
select * from vpdbs;
将LIVING_XIANJD open:
alter pluggable database LIVING_XIANJD open;
alter pluggable database LIVING_TJ open;
alter session set container=LIVING_TJ;
查看当前使用容器
select sys_context ('USERENV', 'CON_NAME') from dual;
创建用户
create user LIVING_XIANJD identified by Ttwis8852;
create user LIVING_TJ identified by Ttwis8852;
赋予所有权
grant dba to LIVING_XIANJD ;
grant dba to LIVING_TJ ;
DROP USER c##ttwis CASCADE
DROP TABLESPACE ttwis;
drop user ttwis cascade;
DROP TABLESPACE ttwis INCLUDING CONTENTS AND DATAFILES;
数据库重启:
先关闭
sqlplus sys/ as sysdba;
我们关闭CDB:
SQL>shutdown immediate
SQL>exit
lsnrctl stop
lsnrctl start
sqlplus sys/ as sysdba;
SQL>startup
Oracle 12C连接的坑
/data/ttwis/ttwis_program/oracle/u01/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
重设密码即可