oracle 数据库主要包括二个主要部分
1:数据库:
一系列物理文件(数据文件和相关对象文件)
2:实例:
一系列操作系统进程和它管理内存区
//-----------------------------------
从多的数据由oracle来分配管理,
是堆砌还是叠加..
oracle 管理数据库的方式是
高效的逻辑结构来管理物理数据结构.
物理结构:对应一系列的不同格式类型作用的文件
逻辑结构:oracle内部存储管理数据方式
//--------------------------------
数据库物理存储结构
数据库由一系列物理文件组成,任务不同
发号指令{领导}
老实听话[跟班]
任劳任怨[白劳]
埋头苦干[保镖]
//-----------------------------------
控制文件 Control Files
数据文件 DataFiles
临时文件 Tempfiles
重做日志文件 Online Redolog File & Archived Log Files
//-------------------------------------------
控制文件(Control Files) 领导
1:文件的大小 不超过20000个数据库
注意:控制文件数据块大小与数据文件数据块大小不一样
SELECT BLOCK_SIZE FROM V$CONTROLFILE;//默认16KB
如何查询数据文件的大小
SELECT BLOCK_SIZE FROM V$DATAFILE;
2:控制文件作用
a:oracle启动从NOMOUNT状态-->MOUNT 状态读取控制文件
如果文件出错或者不存在则启动失败。
3:控制文件格式
二进制不能手工修改可以通过指令修改
ALTER SYSTEM SET ????????????????????????????????????????????????
4:控制文件的内容
数据文件位置/重做日志文件路径/
数据库名称/数据库创建信息/表空间信息
数据文件状态/日志文件信息/检查点信息
1:该文件启动时需要
2:备份
3:数据库结构修改[添加删除表空间,数据文件]
等操作都需要同步控制文件
5:控制文件保证措施
oracle 系统默认二个镜像控制文件11g
三个镜像控制文件10g
6:查看控制文件
SHOW PARAMETER CONTROL_FILES;
SELECT NAME FROM V$CONTROLFILE;
7:控制文件的位置和数据可以由DBA指定???????????????????
//-----------------------------------------------------
数据文件
oracle 需要保存大量的数据,在所有文件中只有数据文件来
保存数据.
数据文件是指在磁盘上的一个物理文件
1:oracle有多少个物理文件
SELECT NAME,STATUS FROM V$DATAFILE;
2:重要概念!!
oracle在创建数据文件时,是通过操作系统
在指定路径下分配一块指定大小的磁盘空间,
并将这块空间的数据清空,然后按照指定的块
大小格式化这块存储区域。
3:裸设备
oracle也允许在裸设备上创建数据文件
裸设备:一块没有分区格式化的磁盘
4:数据是直接保存在数据文件中吗?
数据对象是保存在表空间中,
然后由oracle分配至某一个或某几数据文件;
5:数据文件的状态
Online 联机
Offline 脱机
System 系统状态
RECOVER 11g??????????????????????
只有system和online状态的数据文件用户可以正常访问
其中存储的数据,默认联机状态。
6.修改数据文件的状态
col name for a50;
select name,status from v$datafile;
ALTER DATABASE DATAFILE 'D:\DEV\ORACLEDATA\TEST\SCOTT_TBS01.DBF' OFFLINE;
ALTER DATABASE DATAFILE 'D:\DEV\ORACLEDATA\TEST\SCOTT_TBS01.DBF' ONLINE;
*
第 1 行出现错误:
ORA-01113: 文件 15 需要介质恢复
??正在使用文件??
//------------------------------------------------------------
临时文件
1:概念的误解
临时文件是临时存在的文件-->{不在}
而是临时表空间对应的数据文件
该文件不是用完就会被删除,而该文件中存储的对象属于
<-临时存在的对象->
2:什么情况下会使用临时表空间
通常oracle在执行大规模排序操作时,如果PGA内存区无法存放,
就会将数据存储到临时表空间作为中转,当排序操作完毕后,
这部分空间又可被其它操作使用.
3:临时表空间文件与普通表空间的数据文件不同之处
a:临时表空间必须处理Nologging模式
b:临时表空间数据文件不能置为只读
c:不能通过ALTER DATABASE 语句创建临时表空间数据文件
d:通过RMAN备份时不会备份临时表空间数据文件
恢复数据时也不会恢复临时表空间。
e:临时表空间数据文件在分配空间时与普通表空间数据文件不同.
普通表空间数据文件分配空间时,需要等待操作系统格式化空间
临时表空间数据文件是一种稀疏类型文件.
f:查询临时文件
SELECT * FROM V$TEMPFILE;
SELECT * FROM DBA_TEMP_FILES;
//-------------------------------------------------
日志文件
重做Redo特指一面操作:
oracle执行数据修改操作后{不会马上写入数据文件}
1: 生成重做信息
2: 写入SGA中的一块LOG_BUFFER
3: LOG_BUFFER 空间一般设置3~5MB左右
如何查询LOG_BUFFER?????????????????????
4:当满足触发条件后,LOG_BUFFER中写入联机重做日志文件.
5:查询LOG_BUFFER大小
SQL> show parameter log_buffer
NAME TYPE VALUE
------------------------------------ ----------- --------
log_buffer integer 7708672
6:联机重做日志文件
6.0:查看联机重做日志
select * from v$logfile;
6.1:重做日志组
每个数据库至少有两个重做日志文件组(一般应该3~5组)
6.2:重做日志组工作的方式
循环使用
6.3:循环的方式
LGWR进程当前在写LOG日志组1,日志组1状态 CURRENT状态
数据写满后.
LGWR开始写下一个LOG日志组2<组2 状态CURRENT,组1ACTIVE>
以此类推,所有日志都写满后LGWR再次写LOG日志组
?????LOG组不是满的吗?如何写
6.4:每个日志文件至少要有一份冗余保证数据不会丢失。
6.5:创建新日志文件组-->
ALTER DATABASE ADD LOGFILE GROUP 10(
'D:\DEV\ORACLEDATA\TEST\REDO011.LOG',
'D:\DEV\ORACLEDATA\TEST\REDO012.LOG') SIZE 50M;
6.6: 新创建文件状态
select * from v$log;
10 UNUSED [未被写入过数据]
6.7:删除联机重做日志组
ALTER DATABASE DROP LOGFILE GROUP 9;
注意:不能删除 CURRENT;ACTIVE状态重做日志组
日志文件不会通过指令删除,需要管理员手工删除.
6.8:为日志组添加日志文件
ALTER DATABASE ADD LOGFILE MEMBER 'D:\DEV\ORACLEDATA\TEST\REDO013.LOG' to GROUP 10;
注意:单独添加文件不需要指定大小
6.8:删除日志组中的文件
ALTER DATABASE DROP LOGFILE MEMBER 'D:\DEV\ORACLEDATA\TEST\REDO013.LOG';
注意:删除文件之前必须确保删除后日志组中至少还拥有一个组员
不然触发ORA-00361错误.
ALTER DATABASE DROP LOGFILE MEMBER 'D:\DEV\ORACLEDATA\TEST\REDO011.LOG';
ALTER DATABASE DROP LOGFILE MEMBER 'D:\DEV\ORACLEDATA\TEST\REDO012.LOG';
第 1 行出现错误:
ORA-00361: 无法删除最后一个日志成员 D:\DEV\ORACLEDATA\TEST\REDO012.LOG (组 10)
6.9:查询重做日志
SELECT * FROM V$LOG;
SELECT * FROM V$LOGFILE;
6.10 日志状态
UNUSED: 日志文件从未被写入过数据,刚创建日志组状态。
CURRENT: oracle正在使用的重做日志文件组
ACTIVE: 当前未使用,不过该文件的内容<!!!尚未归档!!>
或者文件中的数据没有全部写入数据文件.
一旦需要实例恢复,必须借助该文件中保存的内容.
CLEARING:该重做日志文件正被重建(重建后状态UNUSED)
?????????????????????????????????????? 如何重建
CLEARING_CURRENT:重做日志重建时出现错误
INACTIVE:联机重做日志文件中的内容己被妥善处理,当前处理空闲状态.
6.11:设置联机重做日志文件大小
a:数据修改频繁度
如果数据频繁修改产生大量的重做日志,此时重做日志太小,
日志组写满了换另一个组,一旦日志文件切换时发现下一组
重做日志尚未完成写入,那么数据库将仃止工作,等待
完成归档或数据写入。
b:平均恢复时间
如果重做日志文件大,是不是可以最终解决问题.
修改数据->写数重做日志文件->触发检查点(CKPT)
如果数据库受损,实例恢复的话必须要花费相当长的时间
处理巨大日志文件。
c:高峰时的负载
不同的业务高峰时刻也不同,有些系统可能是1:00-3:00
有的系统可能是8:00-10:00
不管什么系统设置重做日志都应该以最繁忙的时段产生的
日志量为准.
如果一天50G,其中4GB是13:00-15:00产生的,按照每10-15
分钟左右换一次单个重做日志为3GB左右..
6.12:重做日志的生成
对数据库的更新操作会生成大量的重做日志,如果控制
某些更新语句在执行时不生成重做日志[省时,省空间]
常规情况下有二种
a:某些DDL语句时附加NOLOGGIN子句
b:执行DML时指定HINT APPEND
c:SQL Loader 采用直接路径的方式跳过SQL引擎,不生成重做日志..
//-----
create table test2
NOLOGGING
as
select * from dba_objects
where 1=2;
insert into test2 nologging select * from dba_objects
alter table test2 nologging;
insert into test2 select * from dba_objects;
insert/*+append*/ into test2
select * from dba_objects ;
如果您希望生成重做日志成为强制约定,可以使用属性
Force Logging
一旦改变属性;Nologging/Append Hint自动失效/SQLLDER直接路径也会自动
转为常规路径..
6.13 查询数据库是否启用的Force Logging
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FOR
---
NO
6.14 修改状态ForceLogging
SQL> ALTER DATABASE FORCE LOGGING;
6.15 取消属性
SQL> ALTER DATABASE NO FORCE LOGGING;
//-------------------------------------------------------------------
数据文件
块:区:段:表空间
表/列
表空间->学院
段----->系
区----->专业
块----->班
数据文件-->教学大楼
数据{表/记录/索引}----->学生
:你真实看到一个物理{教学大楼}
:大学校内有自己的组织关系{按照一定规则组织方便高效的管理}
:学生-->去学院报到--->{内部管理方式->系->专业->班->学哪个教学大楼上课}
:学生|<透明>|{内部工作方式}