ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。好比SilverStream就是基于数据库的一种中间件。ORACLE数据库是目前世界上使用最为普遍的数据库管理系统,做为一个通用的数据库系统,它具备完整的数据管理功能;做为一个关系数据库,它是一个完备关系的产品;做为分布式数据库它实现了分布式处理功能。但它的全部知识,只要在一种机型上学习了ORACLE知识,便能在各类类型的机器上使用它。html
Oracle 12c 中引入了一个新功能就是Oracle Multitenant,这个功能能够在多租户容器数据库中,建立并维护许多个可插拔数据库。Oracle Multitenant是Oracle企业版中须要额外付费的组件。然而,在全部Oracle版本中均可以在一个可插拔数据库中无偿使用它。
多租户容器数据库(CDB)是指可以容纳一个或者多个可插拔数据库的数据库。容器是指CDB中的数据文件和元数据的集合。可插拔数据库是指能够经过克隆另外一个数据库轻松建立的数据容器。若是有必要,也可将可插拔数据库从一个CDB传送到另外一个CDB。
全部含有一组主数据文件和元数据的CDB都是根容器。每一个CDB也会含有种子容器,它是用于建立其它可插拔数据库的模板。每一个CDB都由一个根容器、一个种子容器和0个、1个或多个可插拔数据库构成。c++
安装系统:CentOS 7
IP地址:192.168.100.135
安装所需硬盘大小:40G 或从新挂载一块40G硬盘 (安装就须要15G左右,大小固然越大越好)
内存:4G(不建议少于4G)
SWAP(虚拟内存) : 8G (不建议少于8G)sql
Oracle 数据库软件包,无需解压缩,可直接调用。
百度网盘:连接:https://pan.baidu.com/s/1v1h2_wrB6er8HCpONh9xRQ 密码:a0h1数据库
[root@oracle ~]# systemctl stop firewalld.service [root@oracle ~]# systemctl disable firewalld.service [root@oracle ~]# setenforce 0
步骤:vim
[root@localhost ~]# cd /dev [root@localhost dev]# fdisk /dev/sdb n p 回车 回车 回车 w [root@localhost dev]# mkfs -t xfs /dev/sdb1 [root@localhost dev]# mkdir /orc [root@localhost dev]# vim /etc/hostname HOSTNAME=oracle #修改主机名,便于管理,修改完成后保存退出 [root@localhost dev]# vim /etc/hosts 192.168.100.135 oracle #末尾插入一行
[root@oracle ~]# mount /dev/sdb1 /orc [root@oracle ~]# df -h
[root@oracle ~]# yum -y install binutils compat-libcapl compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel
[root@oracle ~]# vim /etc/sysctl.conf
#末行添加 fs.aio-max-nr = 1048576 #异步IO请求数目,推荐值是:1048576(1024*1024也就是1024K个) fs.file-max = 6815744 #打开的文件句柄的最大数量,防止文件描述符耗尽的问题 kernel.shmall = 2097152 #共享内存总量 页为单位,内存除以4K所得 kernel.shmmax = 4294967295 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 #数值对应含义:SEMMSL: 每一个信号集的最大信号数量 #SEMMNS:用于控制整个 Linux 系统中信号的最大数 #SEMOPM:内核参数用于控制每一个semop系统调用能够执行的信号操做的数量 #SEMMNI:内核参数用于控制整个 Linux 系统中信号集的最大数量 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 #套接字发送缓冲区大小的最大值 #修改完成后保存退出 [root@oracle ~]# sysctl -p #使其生效
[root@oracle ~]# groupadd oinstall [root@oracle ~]# groupadd dba [root@oracle ~]# useradd -g oinstall -G dba oracle [root@oracle ~]# passwd oracle 更改用户 oracle 的密码 。 新的 密码: 123123
[root@oracle ~]# mkdir -p /orc/app/oracle [root@oracle ~]# chown -R oracle.oinstall /orc/app/ [root@oracle ~]# chmod -R 755 /orc/app/oracle/
[root@oracle oracle]# chown -R oracle:oinstall /home/oracle/database/ [root@oracle oracle]# chmod -R 755 /home/oracle/database/
[root@oracle ~]# vim /home/oracle/.bash_profile
#删除末尾两行数据并插入如下内容 umask 022 #权限,设置的是反掩码 ORACLE_BASE=/opt/app/oracle #指定基目录 ORACLE_HOME=/opt/app/oracle/product/12.2.0/dbhome_1/ #指定数据存放路径 ORACLE_SID=orcl #指定实例名称 NLS_LANG="SIMPLIFIED CHINESE_CHINA".UTF8 #简体中文语言字符集 PATH=$PATH:$HOME/.local/bin:$HOME/bin:$ORACLE_HOME/bin LANG=zh_CN.UTF-8 export PATH LANG NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID #修改完成后保存退出
#使用pam_limits认证模块 [root@oracle ~]# vim /etc/pam.d/login
#在第7行左右下插入如下内容 session required /lib/security/pam_limits.so session required pam_limits.so #修改完成后保存退出
[root@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 #堆栈设置 #修改完成后保存退出
[root@oracle ~]# 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 #修改完成后保存退出
Oracle 数据库软件包,无需解压缩,可直接调。
百度网盘:连接:https://pan.baidu.com/s/1v1h2_wrB6er8HCpONh9xRQ 密码:a0h1安全
下载文件后挂载到 /opt 下面bash
[root@oracle ~]# xhost + #容许全部用户访问Xserver access control disabled, clients can connect from any host [root@oracle ~]# chmod -R 777 /opt/database/
[root@oracle ~]# su - oracle #切换用户 [oracle@oracle ~]$ export DISPLAY=:0.0 [oracle@oracle ~]$ cd /opt/database/ [oracle@oracle database]$ ls install response rpm runInstaller sshsetup stage welcome.html [oracle@oracle ~]$ ./runInstaller #执行安装脚本 正在启动 Oracle Universal Installer...
点击单实例数据库安装,下一步
典型安装,自行设置口令 ,下一步服务器
#另开一个终端,以ROOT身份登陆 [root@oracle abc]# /orc/app/oraInventory/orainstRoot.sh [root@oracle abc]# /orc/app/oracle/product/12.2.0/dbhome_1/root.sh
首先须要理解的是控制文件的概念和基本管理
控制文件:为二进制文件,初始化大小由CREATE DATABASE指定,可使用RMAN备份。session
- 记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息等等。
- 在参数文件中描述其位置,个数等等。一般采用分散放开,多路复用的原则。在mount阶段被读取,open阶段一直被使用。
- 维护数据库一致性(数据库启动时会比较控制文件与联机日志文件中的ckpt,即起始scn号,如相等则正常启动,不然须要介质恢复)。
- 一个控制文件只能属于一个数据库。
- 控制文件的任意修改将写入到初始化参数中指定的全部控制文件中,读取时则仅读取第一个控制文件。
- 控制文件只能链接一个数据库,控制文件的大小通常不要超过MB,最多为个,最少一个,互为镜像.
-oracle
控制文件中包含的内容
- 数据库的名字、ID、建立的时间戳
- 表空间的名字
- 联机日志文件、数据文件的位置、个数、名字
- 联机日志的Sequence号码
- 检查点的信息
- 撤销段的开始或结束
- 归档信息
- 备份信息
-
数据库启动从nomount状态启动到mount状态时必须读取控制文件,以获取数据文件和日志文件的位置;若是控制文件实效,数据库将没法启动;并且数据库实时运行过程当中,系统也在不停向控制文件中写入stop scn以及checkpoint scn,若是控制文件没法写入,数据库也会宕机。遇到这种状况若是有备份的控制文件,只须要在nomount状态将正确的备份控制文件覆盖到已实效的控制文件,而后启动数据库到open状态便可解决问题。所以系统默认至少同时有几个相同的控制文件互为备份,并且相同的控制文件最好是放在不一样的磁盘目录,分散风险。
-
12c安装完成后默认状况下,控制文件有2个,由上述可知,若是Oracle在安装完成后没有更改控制文件的话,会存在很大的安全隐患,因此建议优化控制文件等。
准备工做:
须要使用root用户,给/opt 777权限,以便于Oracle用户读写操做
[root@HOSTNAMEoracle ~]# chmod 777 /opt/进入Oracle
[root@HOSTNAMEoracle ~]# su - oracle
[oracle@HOSTNAMEoracle ~]$ sqlplus / as sysdba
SQL> select name from v$controlfile;
#控制文件中存放,建立数据库信息、重作日志信息、数据文件及归档日志文件记录等信息 SQL> select type,record_size,records_total,records_used from v$controlfile_record_section;
SQL> alter system set 2 control_files='/orc/app/oracle/oradata/orcl/control01.ctl', 3 '/opt/control02.ctl' scope=spfile; #变动控制文件02的路径,增长安全性
参数更改完毕后须要关闭Oracle数据库,在/orc/app/oracle/oradata/orcl控制文件的路径中进行更改,并重启Oracle才能生效
SQL> shutdown immediate; #关闭数据库 SQL> ho cp /orc/app/oracle/oradata/orcl/control02.ctl /opt/control02.ctl #使用 ho命令在不退出数据库的状况下执行系统命令 SQL> startup #开启数据库 SQL> select name from v$controlfile; #查看控制文件位置
SQL> alter database backup controlfile to '/opt/control.bak'; #执行备份 数据库已更改。 SQL> ho ls /opt #在sql环境中运行系统命令 control02.ctl control.bak ORCLfmap rh
Oracle数据库在运行当中,用户更改的数据首先会存放在数据库高速缓冲区当中,为了提高磁盘读写,oracle机制不会频繁的将缓冲区的数据写到磁盘,而是等到检查点或者数据高速缓冲区达到必定数量时才会写入数据库文件;假若在检查点或者数据量等条件还没知足系统就挂了,那么此时用户提交的数据就会丢失,由于数据还在内存里,为了防止数据丢失,oracle提出了重作日志。
-
日志的模式:
在线日志:在线日志模式,不会主动提交日志,服务器关闭就会丢失部分数据。切换日志组时会自动提交文件并保存,后切换的日志组内写入的文件会丢失。
归档日志:只要写入数据就会提交到硬盘进行保存。
LGWR的触发条件
- 在事务提交的时候(COMMIT)
- Redo Log Buffer 三分之一满
- Redo Log Buffer 多于一兆的变化记录
- 在DBWn写入数据文件以前
#查看重作日志组的组号,序列,大小,个数数量,归档状态,日志组状态 SQL> select group#,sequence#,bytes,members,archived,status from v$log;
新安装完Oracle数据库后,查看下重作日志文件状态,确认归档文件模式是否开启。若是没有开启,建议开启,增长安全性,防止部分数据丢失。
#查看归档日志模式 SQL> archive log list;
SQL> shutdown immediate; #关闭Oracle数据库 SQL> startup mount; #启动实例,加载数据库可是并不打开数据库 SQL> alter database archivelog; #启用归档日志模式 SQL> alter database open; #启动打开数据库 SQL> archive log list; #查看归档日志模式
SQL> set line 120; //设置显示宽度120 SQL> col member for a50; //member列显示宽度50字符宽度 SQL> select group#,status,type,member from v$logfile; //使用logfile视图查看
PS:status 含义
1:空白 正在使用
2:stale 内容不完整
3:invalid 没法访问 如刚创建
4:deleted 文件已再也不有用
/orc/app/oracle/oradata/orcl/ //控制文件和重作日志文件都在此路径
SQL> alter database add logfile group 4 2 ('/orc/app/oracle/oradata/orcl/redo04a.log', 3 '/opt/redo04b.log') size 10m; 数据库已更改。
SQL> alter database drop logfile group 4; 数据库已更改。 #当前日志组不可删除 解决方法:切换日志组: alter system switch logfile;
SQL> alter database add logfile member 2 '/opt/redo01b.log' to group 1, 3 '/opt/redo02b.log' to group 2; 数据库已更改。
SQL> alter database drop logfile member 2 '/opt/redo02b.log'; 数据库已更改。