
Oracle 数据库基本知识概念
Oracle 基本知识框架
目录
1.Oracle体系结构
1.1实例的体系结构
一个数据库服务器中至少有一个实例,在单机环境中,实例和数据库是一一对应的
1.1.1实例的概念
实例是一组内存结构和后台进程的集合
Oracle实例位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被所有进程访问。Oracle 实例 = 进程+进程所使用的内存。
1.1.2实例的组成
SGA(系统全局区)是实例的重要组成部分,一个实例只有一个SAG
用户对数据的操作实际上是在SGA中进行的
访问数据库时,实例为用户进程启动一个服务器进程,并分配一段内存区用来保存用户的私有信息和控制信息,这段内存叫进程全局区(PGA)
SGA是所有用户共享的,在实例的运行过程中一直存在
1.2实例的内存结构
当实例启动时,系统为实例分配一段内存空间,用来存储以下信息:
- 程序代码
- 缓冲数据:用户要访问的数据,重做日志等,这部分内存叫SGA
- 会话有关信息
- 进程间通信有关信息
SGA由多个缓存和缓冲池组成,主要包含以下类型的内存结构:
- 数据库高速缓存
- 重做日志缓冲区
- Java池
- 大池
1.2.1 数据库高速缓存
SGA中的一段存储区域,用来存放用户最近访问的数据
数据库高速缓存由一个个缓冲区组成,缓冲区大小与其中存放的数据块大小一致
根据缓冲区使用情况可分为:空闲缓冲区、脏缓冲区、忙缓冲区
1.2.2 重做日志缓冲区
重做日志是对用户事务所产生的记录,通过重做日志能产生新的数据,保证数据库安全
1.2.3 共享池
存放与SQL语句的执行相关的信息
包括以下三部分:
- 数据字典高速缓存
- 库高速缓存
- 服务器结果缓存
共享池几乎和数据库中的所有操作都有关
1.2.4 Java池
用来存放运行Java所必需的共享代码和共享数据。多个Java代码可以共享Java池中的代码和数据
1.2.5 进程全局区(PGA)
包含了服务器进程的数据和控制信息,是一段非共享的内存区域
PGA包括两部分:私有SQL区和会话内存区
1.3实例中的后台进程
1.3.1 DBWR进程
将数据库高速缓存中的脏缓冲区内容写入数据文件中的数据块
1.3.2 LGWR进程
将重做日志缓冲区中的重做日志写入重做日志文件
1.3.3 CKPT进程
发出检查点
检查点时刻把所有的脏数据写入日志文件
1.3.4 SMON进程
作用:进行实例恢复
SMON是系统监视进程,他的功能是监视数据库服务器的运行状况,执行一些必要的清理工作
实例恢复步骤:
- rolls forward
- redo1
- rolls back
1.3.5 PMON进程
功能:定期检查用户进程,并进行回收资源的操作;将实例和调度器注册到网络监听器中
作用:负责事务故障的恢复;可选的实验进程
1.3.6 ARCH进程
功能:对重做日志文件进行归档
作用:归档进程(备份)
1.4实例的内存结构管理
有三种方法可以对实例的内存结构进行管理
- 自动内存管理
- 自动共享内存管理
- 手工共享内存管理
1.4.1自动内存管理
一种完全自动的内存管理机制
1.4.2自动共享内存管理
自动共享内存管理用来对SGA进行自动设置
一种半自动化的内存管理机制
1.4.3手工共享内存管理
SGA中每种缓冲区的大小都需要手动设置,SGA的总大小为缓存区大小之和
1.5数据库的逻辑结构与物理结构
数据库服务器由实例和数据库组成,数据库用来存储数据,实例用来访问数据库中的数据
1.5.1数据库的逻辑结构
数据库的逻辑结构是指数据的逻辑组织形式,是Oracle内部用来管理数据的机制
即指数据之间的对应关系,只与数据文件有关
表空间 -> 段 -> 区 -> 块 (一对多)
1.5.2 数据库的物理结构
数据库的物理结构是指数据在操作系统中的存储方式,是对用户可见的组织形式
数据库的物理结构包括数据文件,控制文件,重做日志文件
数据文件:用来存储数据
控制文件:记录数据库的结构和状态
重做日志文件:记录用户对数据库所做的修改
2.数据库的启动和关闭
Oracle服务器的启动分为三个步骤:启动实例,装载数据库,打开数据库
2.1 启动服务器
命令:STARTUP MOUNT;
2.1 关闭服务器
命令:SHUTDOWN IMMEDIATE;
Shutdown Mode | A | I | T | N |
Allow new connections(允许新连接) | x | x | x | x |
Wait until current sessions end(等待当前会话结束) | x | x | x | o |
Wait until current transactions end(等待当前事务结束) | x | x | o | o |
Force a checkpoint and close files(强制检查点并关闭文件) | x | o | o | o |
2.3 启动实例分为哪几个阶段
在 NOMOUNT 阶段打开参数文件
在 MOUNT 阶段打开控制文件
在 OPEN 阶段打开数据文件、日志文件
3.控制文件管理
控制文件要有一个副本坏掉,所有都结束,负责数据库的同步
控制文件的大小由参数文件决定
控制文件中包含:
- 数据库名称
- 数据文件和重做日志文件的位置和名称
- 当前日志序列号
- 检查点信息
- 表空间的名称
- RMAN的备份与恢复信息
3.1 参数文件pfile与spfile
3.3.1pfile和spfile区别和联系
- pfile是文本文件的,而spfile是二进制格式的。
- pfile默认init+实例名.ora ,是一个文本文件,可以编辑
- spfile默认spfile+init+实例名.ora,是一个二进制文本,不能修改
- 两个文件可以通过命令create pfile from spfile或者create spfile from pfile来创建
3.3.2参数文件的修改
3.3.2.1 pfile
pfile进行参数修改:直接进行编辑修改
3.3.2.2 spfile
(1)alter session :只对当前会话生效
(2)alter system set user_dump_dest ='/U01/app/rdbms/masterdb/masterdb/trace' scope=both;
scope的三个参数:
- spfile:重启生效
- momory:立即生效,关了就没
- both:当前立即生效,重启仍然生效
(3)参数:deferred
新用户用新值,新用户才生效
(4)alter system修改初始化参数 control-file 的值
3.2 重新创建控制文件
3.2.1控制文件全部不可用的情况
创建控制文件的命令:create controlfile
一般情况下创建控制文件的任务由 sys 用户完成,普通用户身份创建控制文件,则需要有sysdba权限
步骤:
(1)创建控制文件时,首先启动实例,将数据库服务器启动到nomount状态
(2)控制文件被创建后,数据库服务器就打开控制文件,进行mount状态,为了使用户能够访问数据库,必须将数据库服务器的状态转入open状态
例:
create controlfile reuse database "orcl"
logfile
group 1 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG',
group 2 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG',
group 3 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'
datafile
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\SYSTEM01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\SYSAUX01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\UNDOTBS01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\USERS01.DBF'
maxlogfiles 50
maxlogmembers 3
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;
3.2.2修改数据库名称的情况
数据库的名称由初始化参数 DB_NAME 指定
实例的名称由初始化参数 INSTANCE 指定
例:修改数据库名为ORCL
(1)修改DB_NAME的值
DB_NAME = ORCL
(2)创建控制文件
CREATE CONTROLFILE REUSE SET DATABASE orcl RESETLOGS
......
(3)启动服务器到 open 状态
STARTUP MOUNT
(4)查看初始化参数的值,确定新的控制文件是否起作用
SHOW PARAMETER DB_NAME
3.2.3 修改永久参数的情况
(1)永久参数的意义:
MAXINSTANCES:指定可以访问数据库的最大实例的个数
MAXLOGHISTORY:记录控制文件中可以记录的最大历史日志条数
MAXLOGFILES:指定数据库中包含的最大重做日志组数
MAXLOGMEMBERS:指定每个日志组中可以包含的最大重做日志文件数目
MAXDATAFILES:指定数据库中可以创建的最大数据文件数目
(2)永久参数保存在控制文件中,修改永久参数需要创新创建控制文件
创新创建数据库ORCL的控制文件
CREATE CONTROLFILE REUSE DATABASE ORCL NORESETLOGS
3.3 控制文件的备份与删除
备份控制文件时,不需要关闭数据库服务器,可以将数据库文件备份为一个二进制文件,也可以在跟踪文件中生成一条SQL语句
例如:将一个控制文件备份为一个二进制文件
ALTER DATABASE BACKUP CONTROLFILE TO '/home/oracle/control.bak'
以下语句用于将控制文件备份到跟踪文件TRACE之中:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
3.4 控制文件信息的查询
3.4.1 查询控制文件的位置和名称
获得数据库中的所有控制文件:
SELECT statue,name FROM V$CONTROLFILE;
通过初始化参数 CONTROL_FILES 查询控制文件信息:
SHOW PARAMETER CONROL_FILE;
3.4.2 查询控制文件中记录的信息
SELECT type,record_size,records_total,records_used FROM v$controlfile_record_section;/
3.4.3 使用spfile多元化控制文件
1)查看控制文件信息和spfile 信息,创建Pfile文件
select name from v$controlfile;
show parameter spfile;
create pfile from spfile;
2)修改control_files 参数后保存
alter system set control_files=05:58:01 2 '/u01/app/oracle/oradata/lx02/control01.ctl','/disk1/lx02/oradata/control02.ctl' scope=spfile;
System altered.
3)关闭instance ,拷贝controlfile
shutdown immediate
$ cp /u01/app/oracle/oradata/lx02/control01.ctl /disk1/lx02/oradata/control02.ctl
4)startup 启动实例
select name from v$controlfile;
4. 日志文件管理
恢复操作最关键的结构是重做日志,它由两个或多个预先分配的文件组成,这些文件存储发生时对数据库所做的所有更改。Oracle数据库的每个实例都有一个相关的重做日志,以在实例失败时保护数据库。
4.1 日志组
4.1.1 日志组与日志文件的状态
4.1.1.1 日志组有四种状态:unused、active、inactive、current
unused:该日志组从来没有被使用过
current:当前正在使用的日志组,即后台进程LGWR正在写的日志组。
active:活动状态,当发生日志切换的时候,状态为current的日志组就会变成active状态,表明记录在这个日志组的事务提交所造成的数据块改变,还没有完全从database buffer cache 写入到data file中。处在这个状态的日志组是不允许被覆盖的。崩溃恢复需要该状态,可用于块恢复,可能归档也可能未归档
inactive:非活动状态,处于这个状态的日志组,表明记录在这个日志组的事务提交所造成的数据块的改变,已经完全从database buffer cache写入到data file中了,实例恢复不再需要这个状态的日志组了, 所以这个日志组是可以被覆盖的。
4.1.1.2日志文件状态
blank:日志文件可以使用,就标记blank
invalid:日文文件不可使用,就标记invalid
stale:日志文件产生错误,就标记stale
deleted:
4.1.1.3 如何删除一个current状态的日志组
步骤:
-
- 切换日志组状态 变为active
- 设置检查点,手工设置归档,变为inactive
- 删除日志组。
4.2 手工切换日志文件和清空日志文件
4.2.1 切换日志文件组
日志文件组是循环使用的,当一组日志文件被写满时,Oracle系统自动的切换到下一组日志文件。在需要的时候,数据库管理员也可以手动的切换到其他的日志文件组。
切换日志文件组需要使用如下的语句:
alter system switch logfile;
4.2.2 清空日志文件组
如果日志文件组中的日志文件受损,将导致数据库无法将受损的日志文件进行归档,这会最终导致数据库停止运行。此时,在不关闭数据库的情况下,可以选择清空日志文件组中的内容。
清空日志文件组的语法如下:
alter database clear logfile group group_number;
注意:
被清空的日志文件组不能处于current状态,不能清空数据库当前正在使用的日志文件组。
当数据库中只有两个日志文件组时,不能清空日志文件组。
更多推荐
所有评论(0)