一、Linux下安装(命令行安装)
一、安装环境
以下安装环境是在虚拟机测试环境,仅供参考
操作系统:CentOS 7
内存:2G
CPU:双核
硬盘:50G
因为
root
容量只有10G,这里新增一块硬盘,文件格式为ext4
,容量为50G
,挂载在/data
下
二、安装包下载
截至目前为止,Oracle官方网站已经找不到Oracle12c的包了。
可以跳转到搜索资源搜索页面,搜索其对应的版本下载。
- 搜索关键字
Oracle Database 12c
,然后选择Oracle Database 12c 12.2.0.1.0 ( Oracle Database In-Memory, Oracle Database Vault )
进行队列添加;- 点击右上角的
Continue
,跳转到组件包选择- 选择
Oracle Database 12.2.0.1.0
。后边平台选择Linux x86_64
- 然后一路
Continue
一直到Download
- 打开上述步骤下载的下载器,选择好下载路径,就会自动下载
三、环境配置准备
3.1 防火墙配置
3.2 selinux配置
临时关闭:setenforce 0
永久关闭:编辑/etc/selinux/config
,更改为SELINUX=disabled
3.3 安装依赖包
yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*i686 compat-libstdc++-33*.devel compat-libstdc++-33 compat-libstdc++-33*.devel gcc gcc-c++ glibc glibc*.i686 glibc-devel glibc-devel*.i686 ksh libaio libaio*.i686 libaio-devel libaio-devel*.devel libgcc libgcc*.i686 libstdc++ libstdc++*.i686 libstdc++-devel libstdc++-devel*.devel libXi libXi*.i686 libXtst libXtst*.i686 make sysstat unixODBC unixODBC*.i686 unixODBC-devel unixODBC-devel*.i686
安装完之后检查包,共31个
rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
3.4 创建用户和用户组
创建oinstall
和dba
用户组
groupadd oinstallgroupadd dba
创建oracle
用户
useradd -g oinstall -G dba oracle
设置oracle
密码
passwd oracle
查看创建结果
id oracle
注意:这里查出来的
uid
必须是oracle
,gid
必须是oinstall
,组
必须是dba
3.5 修改内核参数
编辑打开配置文件
vim /etc/sysctl.conf
在文件中加上:
fs.aio-max-nr=1048576fs.file-max=6815744kernel.shmall=524288kernel.shmmax=2147483647kernel.sem=250 32000 100 128kernel.shmmni=4096kernel.panic_on_oops=1net.core.rmem_default=262144net.core.rmem_max=4194304net.core.wmem_default=262144net.core.wmem_max=1048576net.ipv4.conf.all.rp_filter=2net.ipv4.conf.default.rp_filter=2fs.aio-max-nr=1048576net.ipv4.ip_local_port_range=9000 65500
附各个参数说明:
**fs.aio-max-nr:**此参数限制并发未完成的请求,应该设置避免I/O子系统故障。
**fs.file-max:**该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
**kernel.shmall:**该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求.
**kernel.shmmax:**是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。
**官方建议值:**32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。
64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,例如,如果为12GB物理内存,可取1210241024*1024-1=12884901887。
**kernel.shmmni:**该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。
kernel.sem:以kernel.sem = 250 32000 100 128为例:
- 250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
- 32000是参数semmns的值,表示系统内可允许的信号量最大数目。
- 100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
- 128是参数semmni的值,表示系统信号量集合总数。
**net.ipv4.ip_local_port_range:**表示应用程序可使用的IPv4端口范围。
**net.core.rmem_default:**表示套接字接收缓冲区大小的缺省值。
**net.core.rmem_max:**表示套接字接收缓冲区大小的最大值。
**net.core.wmem_default:**表示套接字发送缓冲区大小的缺省值。
**net.core.wmem_max:**表示套接字发送缓冲区大小的最大值。
生效配置
sysctl -p
3.6 修改配置
3.6.1 编辑limits.conf
vim /etc/security/limits.conf
在文件末尾加上:
oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536oracle soft stack 10240oracle hard stack 10240
第1行是设置进程数软限制;
第2行是设置进程数硬限制;
第3行是设置文件数软限制;
第4行是设置文件数硬限制
3.6.2 编辑login
vim /etc/pam.d/login
添加以下内容
session required /lib64/security/pam_limits.sosession required pam_limits.so
3.6.3 编辑profile
vim /etc/profile
在文件末尾添加以下内容
if [ $USER = "oracle" ]; thenif [ $SHELL = "/bin/ksh" ]; thenulimit -p 16384 ulimit -n 65536elseulimit -u 16384 -n 65536fifi
使配置文件生效
source /etc/profile
3.6.4 创建数据库目录
mkdir -p /data/server/oraclechown -R oracle:oinstall /data/server/oraclechmod -R 775 /data/server/oracle
3.6.5 配置Oracle用户
切换到oracle用户下
su oracle
打开并编辑环境变量文件,配置oracle用户环境变量
vim ~/.bash_profile
在末尾添加
export ORACLE_BASE=/data/server/oracleexport ORACLE_SID=orcl
使配置生效
source ~/.bash_profile
四、安装部署及配置
4.1 上传Oracle安装包
创建一个文件夹
su rootmkdir -p /data/file/oraclechown -R oracle:oinstall /data/file/oraclechmod -R 775 /data/file/oracle# 传输安装包scp -P 12305 root@192.168.1.200:/data/backup/db/oracle/12c/V839960-01.zip /data/file/oracle
4.2 安装解压工具
切换到root用户
su - root
安装解压工具
yum install -y unzip zip
4.3 解压文件
切换到oracle用户
su - oracle
解压文件
unzip /data/file/oracle/V839960-01.zip
4.4 复制相应的模板
为了不影响原来的文件内容(后面文件脚本内容会作修改),将相应的模板复制一份,当然也可以省略这步
su oraclemkdir /data/file/oracle/database/etccp/data/file/oracle/database/response/* /data/file/oracle/database/etc
设置权限
su rootchmod 700 /data/file/oracle/database/etc/*.rsp
4.5 编辑文件内容
切换到oracle用户
su - oracle
打开编辑db_install.rsp
vim /data/file/oracle/database/etc/db_install.rsp
找出以下项,并作修改(根据个人实际情况修改,比如我这边的oracle的目录是做过调整的)
oracle.install.option=INSTALL_DB_SWONLY // 安装类型UNIX_GROUP_NAME=oinstall // 安装组INVENTORY_LOCATION=/data/server/oracle/oraInventory //INVENTORY目录(不填就是默认值)ORACLE_HOME=/data/server/oracle/product/12/db_1ORACLE_BASE=/data/server/oracleoracle.install.db.InstallEdition=EE // 企业版本oracle.install.db.OSDBA_GROUP=dbaoracle.install.db.OSOPER_GROUP=oinstalloracle.install.db.OSBACKUPDBA_GROUP=oinstalloracle.install.db.OSDGDBA_GROUP=oinstalloracle.install.db.OSKMDBA_GROUP=oinstalloracle.install.db.OSRACDBA_GROUP=oinstalloracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型oracle.install.db.config.starterdb.globalDBName=orcloracle.install.db.config.starterdb.SID=orcloracle.install.db.config.starterdb.memoryLimit=81920 //自动管理内存的内存(M)oracle.install.db.config.starterdb.password.ALL=oracle//设定所有数据库用户使用同一个密码SECURITY_UPDATES_VIA_MYORACLESUPPORT=falseDECLINE_SECURITY_UPDATES=true
4.6 开始安装
执行db_install.rsp
文件
cd /data/file/oracle/database/./runInstaller -ignoreSysPrereqs -ignorePrereq -waitforcompletion -showProgress -silent -responseFile /data/file/oracle/database/etc/db_install.rsp
# 可以使用/data/server/oracle/oraInventory/logs/installActions2023-06-20_06-30-58PM.log实时监控日志tail -f /data/server/oracle/oraInventory/logs/installActions2023-06-20_06-30-58PM.log
在安装快完成的时候会提示要切换到root用户执行两个脚本,这步跟着照做就是
su - rootsh /data/server/oracle/oraInventory/orainstRoot.shsh /data/server/oracle/product/12/db_1/root.sh
4.7 配置oracle用户
切换到oracle用户,打开并编辑用户编辑变量文件
su - oraclevim ~/.bash_profile
按需求将以下内容加上
export ORACLE_BASE=/data/server/oracleexport ORACLE_SID=orclexport ROACLE_PID=oral12#export NLS_LANG=AMERICAN_AMERICA.AL32UTF8export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/libexport ORACLE_HOME=/data/server/oracle/product/12/db_1export PATH=$PATH:$ORACLE_HOME/binexport LANG="zh_CN.UTF-8"export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
使配置生效
source ~/.bash_profile
配置监听
netca /silent /responsefile /data/file/oracle/database/etc/netca.rsp
启动监听
lsnrctl start
修改静默建库文件
vim /data/file/oracle/database/etc/dbca.rsp
其中文件内容修改如下(根据实际情况修改)
responseFileVersion=/data/server/oracle/product/12/db_1/assistants/rspfmt_dbca_response_schema_v12.2.0gdbName=orclsid=orcldatabaseConfigType=SIcreateAsContainerDatabase=truenumberOfPDBs=1pdbName=orclpdbtemplateName=/data/server/oracle/product/12/db_1/assistants/dbca/templates/General_Purpose.dbcemExpressPort=5500omsPort=0characterSet=AL32UTF8listeners=LISTENERmemoryPercentage=40automaticMemoryManagement=falsetotalMemory=0
执行静默建库
dbca -silent -createDatabase-responseFile/data/file/oracle/database/etc/dbca.rsp
此时数据库已安装成功
4.8 开启实例
sqlplus / as sysdbaSQL>startup
五、数据库启动与关闭
只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库。
在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库。
虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库。
5.1 启动
Oracle数据库的完整启动过程包含以下3个步骤:
简单地说,就是:启动实例–>加载数据库–>打开数据库.
具体说明:
1.创建并启动与数据库对应的实例。
在启动实例时,将为实例创建一系列后台进程和服务进程,并且在内存中创建SGA区等内存结构。在实例启动的过程中只会使用到初始化参数文件,数据库是否存在对实例的启动没有影响。如果初化参数设置有误,实例将无法启动。
2.为实例加载数据库。
加载数据库时实例将打开数据库的控制文件,从控制文件中获取数据库名称、数据文件的位置和名称等有关数据库物理结构的信息,为打开数据库做好准备。如果控制文件损坏,则实例将无法加载数据库。在加载数据库阶段,实例并不会打开数据库的物理文件—-数据文件和重做日志文件。
3.将数据库设置为打开状态。
打开数据库时,实例将打开所有处于联机状态的数据文件和重做日志文件。控制文件中的任何一个数据文件或重做日志文件无法正常打开,数据库都将返回错误信息,这时需要进行数据库恢复。
只有将数据库设置为打开状态后,数据库才处于正常状态,这时普通用户才能够访问数据库。在很多情况下,启动数据库时并不是直接完成上述3个步骤,而是逐步完成的,然后执行必要的管理操作,最后才使数据库进入正常运行状态。所以,才有了各种不同的启动模式用于不同的数据库维护操作。
因为Oracle数据库启动过程中不同的阶段可以对数据库进行不同的维护操作,对应我们不同的需求,所以就需不同的模式启动数据库。
各种模式详解:
1.NoMount 模式(启动实例不加载数据库)
命令:startup nomount
讲解:这种启动模式只会创建实例,并不加载数据库,Oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据文件。在NoMount模式下,只能访问那些与SGA区相关的数据字典视图,包括V P A R A M E T E R 、 VPARAMETER、VPARAMETER、VSGA、V P R O C E S S 和 VPROCESS 和 VPROCESS和VSESSION等,这些视图中的信息都是从SGA区中获取的,与数据库无关。非安装启动,这种方式启动下可执行:重建控制文件、重建数据库、读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
模式用途:
(1)创建新数据库;
(2)重建控制文件。
2.Mount模式(加载数据库但不打开数据库)
命令:startup mount
讲解:这种启动模式将为实例加载数据库,但保持数据库为关闭状态。因为加载数据库时需要打开数据库控制文件,但数据文件和重做日志文件都都无法进行读写,所以用户还无法对数据库进行操作。 在Mount模式下,只能访问那些与控制文件相关的数据字典视图,包括V T H R E A D 、 VTHREAD、VTHREAD、VCONTROLFILE、V D A T A B A S E 、 VDATABASE、VDATABASE、VDATAFILE 和 V$LOGFILE等,这些视图都是从控制文件中获取的。
模式用途:
(1)重命名数据文件;
(2)添加、删除或重命名重做日志文件;
(3)执行数据库完全恢复操作;
(4)改变数据库的归档模式。
3.Open模式(正常打开数据库)
命令:startup [open]
讲解:正常按3个步骤启动数据库。
模式用途:平时不对数据库做什么维护,像只做应用开发,用这个模式就好了。
4.强制启动模式
命令:startup force
用途&讲解:在某些情况下,使用前面的各种模式都无法成功启动数据库时,可以尝试强制启动模式。
使用Alter Database语句,还可以在各启动模式间切换。并且,还可以对数据库设置不同的状态用于不同的操作,如受/非受限抽状态、只读。
使用Alter Database语句,在各启动模式间切换。
(1)从NoMount模式切换到Mount模式(没有从mount切换到nomount的):
命令:ALTER DATABASE MOUNT;
(2)当数据库状态为关闭时,切换到Open模式
命令:ALTER DATABASE OPEN;
(3)在Open模式下,还可以选择将数据库设置为非受限状态和受限状态。
命令:
在启动Open模式时,添加restrict关键字:startup restrict
设置或取消受限状态:alter system enable\disable restricted session;
讲解:
非受限状态,就是我们平时应用程序开发用到的状态。
受限状态,当打开的数据库被设置为受限状态时,只有Create Session 和 Restricted Session系统权限 或者 具有SYSDBA 和 SYSPORE 系统权限的用户才能连接到数据库。但进入受限状态后,系统中仍然可能会存在活动的普通用户会话。
受限状态用途:
(1)执行数据导入或导出操作;
(2)暂时拒绝普通用户访问数据库;
(3)进行数据库移植或升级操作。
(4) 只读状态
设置只读命令:alter database open read only;
取消只读命令:alter database open read write;
用途&讲解:当一个正常打开的数据库被设置为只读状态时,用户只能查询数据,但不能以任何方式对数据库对象进行修改。处于只读状态,可能保证数据文件和重做日志文件中的内容不被修改,但是并不限制那些不会写入数据文件与重做日志文件的操作。
5.2 关闭
与数据库启动一样,关闭数据库与实例也分为3步:关闭数据库–>实例卸载数据库—>终止实例。
详细步骤为:
(1)关闭数据库,oracle将重做日志高速缓存中的内容写入重做日志文件,并且将数据库高速缓存中被改动过的数据写入数据文件,然后再关闭所有的数据文件和重做日志文件,这时数据库的控制文件仍然处于打开状态,但是由于数据库处于关闭状态,所以用户无法访问数据库。
(2)卸载数据库,关闭数据库后,例程才能被卸载,控制文件再这个时候被关闭,但例程仍然存在 。
(3)终止例程,进程终止,分配给例程的内存sga区被回收。
1.Nomal(正常关闭方式)
命令:shutdown nomal
讲解:正常方式关闭数据时,Oracle执行如下操作:
(1)阻止任何用户建立新的连接。
(2)等待当前所有正在连接的用户主动断开连接(此方式下Oracle不会立即断掉当前用户的连接,这些用户仍然操作相关的操作)
(3)一旦所有的用户都断开连接,则立即关闭、卸载数据库,并终止实例。(所以,一般以正常方式关闭数据库时,应该通知所有在线的用户尽快断开连接)
2.Immediate(立即关闭方式)
命令:shutdown immediate
讲解:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)Oracle不等待在线用户主动断开连接,强制终止用户的当前事务,将任何未提交的事务回退。(如果存在太多未提交的事务,此方式将会耗费很长时间终止和回退事务)
(3)直接关闭、卸载数据库,并终止实例。
3.Transactional(事务关闭方式)
命令:shutdown transactional
讲解:这种方式介于正常关闭方式跟立即关闭方式之间,响应时间会比较快,处理也将比较得当。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)等待所有未提交的活动事务提交完毕,然后立即断开用户的连接。
(3)直接关闭、卸载数据库,并终止实例。
4.Abort(终止关闭方式)
命令:shutdown abort
讲解:这是比较粗暴的一种关闭方式,当前面3种方式都无法关闭时,可以尝试使用终止方式来关闭数据库。但是以这种方式关闭数据库将会丢失一部份数据信息,当重新启动实例并打开数据库时,后台进程SMON会执行实例恢复操作。一般情况下,应当尽量避免使用这种方式来关闭数据库。执行过程如下:
(1)阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务。
(2)立即终止当前正在执行的SQL语句。
(3)任何未提交的事务均不被退名。
(4)直接断开所有用户的连接,关闭、卸载数据库,并终止实例。
六、sqlplus改进
在默认的sqlplus的使用过程中发现是比较难用的,最好的例子就是不能用退格键以及掉出历史命令的上下键,这里介绍退格键的改进。
切换至oracle用户
su - oracle
打开并编辑用户环境变量配置文件
vim ~/.bash_profile
在文件末尾加上以下代码并保存退出
stty erase ^h
使配置文件生效
source ~/.bash_profile
此时再进入sqlplus测试发现,退格键已经能用了
七、navicat远程数据库
一般数据库是安装在远程服务器上,然后用本机的管理软件去连接,此时需要配置一下。
在oracle用户下,打开并编辑listener.ora文件(一般在安装目录下)
su oraclevim /data/server/oracle/product/12/db_1/network/admin/listener.ora# 然后将其中的HOST改为服务器的IP(这里为了保留之前的配置所以直接在文件后面复制了上面的配置然后作修改)LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.245)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))
打开并编辑tnsnames.ora文件
su oraclevim /data/server/oracle/product/12/db_1/network/admin/tnsnames.oraLISTENER_ORCL =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.245)(PORT = 1521))ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.245)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))
然后重启Oracle
lsnrctl restart