管理重做日志文件:
重做日志文件也称联机重做日志,目的是恢复数据。
在数据库运行过程中,用户更改的数据会暂时存放在数据库的高速缓冲区中。为了提高写数据库的速度,并不是一旦有数据变化,就把变化的数据写到数据库文件中。频繁的读写磁盘会使数据库系统效率降低,所以,要等到数据库高速缓冲区中的数据达到一定的量或满足一定条件时,DBWR进程才会将变化了的数据写到数据文件中。这种情况下,如果DBWR把变化了的更改写到数据文件之前发生了宕机,那么数据库高速缓冲区中的数据就会全部丢失。如果在数据库服务器重启动后无法恢复这部分用户更改的数据,显然是不可以的。
重做日志就是把变化了的数据首先保存起来,其中LGWR进程负责把用户更改的数据先写到重做日志文件中,这样数据库重新启动时,数据库系统从重做日志文件中读取这些变化了的数据,将用户更改的数据提交到数据库中,写入数据文件。
为了提高磁盘效率和防止重做日志文件损坏,oracle引入了一种重做日志文件结构,如图:
上图可以看出有3个重做日志组,每组包含两个重做日志成员。当第一个日志组写满之后,就会停止写入,而转向第二个日志组,第二个写满后,转向第三个日之组,第三个写满就向第一个日志组写入,oracle以这种循环方式使用重做日志组。
Oracle规定每个数据库至少有两个日志组,每组至少包含一个或者多个日志成员。
使用新的重做日志之前,DBWR进程需要将所有的数据更改写到数据文件中。如果数据库处于归档模式下,当发生日志组切换时,归档进程ARCH会把当前已满的重做日志文件中的数据复制到归档日志中。
1. 读取重做日志文件信息
数据字典视图V$LOG记录了当前数据库的日志组号、日志序列号,每个日志文件的大小,每个日志组的成员数量,是否存档以及日志组的当前状态。
使用V$LOG查看重做日志文件
上图中输出结果有3个日志组,每个日志组分别有一个日志文件。日志组3位当前正在使用的重做日志组,成为当前日志组。
数据字典视图V$LOGFILE记录了当前日志组号,该日志组的状态、类型和日志组成员信息。
- 创建重做日志组
增加重做日志成员,并把每个日志组的重做日志成员分布在不同的磁盘上,提高磁盘效率和防止重做日志文件的损坏。
语法:
ALTER DATABASE [database_name]
ADD LOGFILE [GROUP group_number]
Filename [SIZE size_integer [K\M]] [REUSE]
实例:
Root用户运行: mkdir /backup1
上图中的两个重做日志文件是同一组,且这两个重做日志成员处于联机状态。
注意:日志文件大小一般在10M-50M比较合适。
- 删除重做日志组
删除文件组的限制条件如下:
- 当前日志组不可删除
- 要删除当前日志组需要先对当前日志组进行切换
- 使用命令为alter system switch logfile;
- 活动的日志组不可删除
- 没有归档的日志组不可删除(前提是已运行在归档模式下)
添加删除重做日志文件
上图中发现新添加的redo11.log是无效状态,是因为三个日志组的日志成员还没有写满,所以redo11.log是无效状态,只要做两次强制日志切换就可以发现是ONLINE状态了,方法如下:
多执行几次,再次查看文件:
发现redo11.log已经在线。
删除重做日志文件redo11.log
提示不能删除,是因为redo03.log当前正在使用,状态为current。
强制切换之后就可以删除了。
日志切换和检查点事件
日志切换就是停止当前日志组,转而写另外一个新的日志组,系统可以自动切换,也可以手工切换,当发生日志切换时,系统会在后台完成检查点的操作,以减少实例的恢复时间。
检查点是一个事件,用于减少实例恢复的时间,当检查点发生时,它会触发DBWR进程,把数据高速缓冲中变化了的数据写入数据文件,同时检查点进程更新控制文件和数据文件头部,以使它们保持一致。检查点其实是一个后台进程,用来保证所有修改过的数据库缓冲区的东西都写入数据库文件。
检查点时间越频繁,则一旦数据库发生故障,需要数据库恢复的重用日志中的数据就越少(因为在恢复时,就不必检查恢复检查点之前的重用日志中的数据),所以就减少实例恢复的时间。
启动时间:
- 每隔三秒(或更加频繁)
- 发生日志切换
- 立即选项关闭例程时
- 手动请求
负责以下事项:
使用检查点信息更新数据文件标题
使用检查点信息更新控制文件
在完成检查点向DBWn发出信号
强制日志切换命令如下:
- 管理归档日志文件
- 归档日志介绍
Oracle数据库有两种运行方式,归档(ARCHIVELOG)方式和非归档(NO ARCHIVELOG)方式。在非归档方式下,日志切换时直接覆盖以前的重做日志文件,不产生归档日志。数据库在归档方式下运行,在日志切换后,ARCH进程会对自己写满的重做日志文件进行存档。默认情况下,oracle采用非归档的运行方式,主要因为归档方式会给系统带来一定的性能问题,只有当数据库运行在归档方式时,ARCH进程才存在,ARCH进程是oracle的可选后台进程,将日志存档,以便保存对数据库做的所有修改,这样,及时在数据文件磁盘损坏的情况下,数据库管理员也能将对数据库恢复至故障发生时的状态。
1)归档进程
- 是可选的后台进程
- 为数据库设置ARCHIVELOG(归档)模式时会自动归档联机重做日志文件
- 保留对数据库所有更改的记录
2)归档日志文件
1. 数据库在允许覆盖重做日志信息之前生成联机重做日志组的副本。
2. 这些副本又称为“归档日志”。
2、配置数据库归档日志步骤:
- 查询数据库归档方式,确定当前不处于归档方式
- 关闭数据库并启动数据库到MOUNT状态
- 将数据库设置位归档模式,并验证
SQL>archive log list;
SQL>shutdown immediate;
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
查询数据库归档方式,确定当前不处于归档方式。
关闭数据库并启动数据库到mount模式。
使用alter database archivelog命令将数据库设置为归档模式,并验证归档模式是否改变。
- 获取归档日志信息
数据字典视图可帮助用户获取数据库配置信息。用户通过使用V$ARCHIVE_DEST和V$ARCHIVE_LOG视图获取归档日志信息。
V$ARCHIVE_DEST:显示当前所有归档日志存储位置及其状态。
V$ARCHIVE_LOG:显示历史归档日志信息。
如何查看所有有效的归档日志文件存储目录:
获取已归档的日志文件的信息,归档进程会在每次日志切换后将联机重做日志文件复制到一个归档日志文件,从而生成一串连续的且能用于恢复一个备份的日志文件。这些日志文件的名称和位置由若干初始化参数控制。
- 数据字典
- 数据字典定义
数据字典是oracle存储关键信息的表和视图的集合。是数据库的说明,包含数据库中所有对象的名称和属性。Oracle进程会在SYS模式中维护这些表和视图,也就是说数据字典的所有者为SYS用户,数据存放在SYSTEM表空间中。
数据字典描述了实际数据是如何组织的,如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。对他们可以像处理其他数据库表或视图一样进行查询,但不能进行任何修改。
Oracle数据字典通常是在创建和安装数据时被创建的。
Oracle数据字典是oracle数据库系统工作的基础。
没有数据字典的支持,oracle数据库系统就不能进行任何工作。
数据字典的构成
数据字典分为数据字典表和数据字典视图。数据字典中的表不可以直接被访问,但是可以访问数据字典中的视图。数据字典视图分为两类:静态数据字典视图和动态数据字典视图。
数据字典表
数据字典表中的数据是oracle系统存放的系统数据,而普通表存放的是用户的数据。为了方便的区别这些表,这些表的名称都是用$结尾,这些表属于SYS用户。
为了方便对数据字典表的查询,oracle对这些数据字典都分别建立了用户视图,这样既容易记住,还隐藏了数据字典表之间的关系。
静态数据字典视图
静态数据字典中的视图分为3类,他们分别由3个前缀构成:USER_*、ALL_*、DBA_*。
- USER_*:该视图存储了当前用户所拥有的对象的信息(既所有在该用户模式下的对象)。
- ALL_*:该视图存储了当前用户能够访问的对象的信息,(与USER_*相比,ALL_*并不需要拥有该对象,只需要具有访问该对象的权限即可)。
- DBA_*:该视图存储了数据库中所有对象的信息,(前提是当前用户具有访问权限,一般来说必须具有管理员权限)。
常用的数据字典视图
1)user_tables:描述当前用户拥有的所有表的信息,主要包括表名、表空间名、簇名等。
通过此视图可以清楚地了解当前用户拥有的表有哪些.
SELECT table_name, tablespace_name FROM user_tables;
显示结果:
- 查询该用户有哪些索引
SELECT index_name FROM user_indexes;
显示结果如下:
- 查询该用户拥有哪些视图
显示结果如下:
- 查询该用户拥有哪些数据库对象,包括表、视图、存储过程、触发器、包、索引、序列等。
SELECT object_name FROM user_objects;
\
查询结果如下:
查询当前用户的信息,主要包括当前用户名、账户id、账户状态、创建时间等。
SELECT * FROM user_users;
查询结果,我只显示用户名和id了。
查询当前用户能够访问的所有表、过程、函数等。
DICTIONARY 数据字典视图包含数据字典中一切对象的名称和说明
SELECT * FROM dictionary;
输出结果如下所示。
使用数据字典不需要记住所有的数据视图。只需要按照如下步骤操作:
了解数据字典大概分成3类,(user_*、all_*、dba_*),常用的是user_*,可以通过下面语句查询具体视图的描述。
然后根据查询结果找到需要的数据字典视图,例如:想知道表就可以查询user_table,想知道视图就可以查询user_view,想知道存储过程就可以查询user_procedure,想知道表中列的情况就可以查询user_tab_columns.
- 动态数据字典视图及使用
- 概念
除了静态数据字典中的3类视图,其他的字典视图中主要是V$视图,之所以这样命名是因为他们都是以V$或GV$开头的,这些视图会不断地进行更新,可以反映出当前实例和数据库的运行状况。动态性能表用于记录当前数据库的活动,只存在于数据库运行期间,实际的信息都取自内存和控制文件,dba可以使用动态视图来监视和维护数据库。下面列举几个dba维护数据库中经常使用的几个动态数据字典视图。
列举常用动态数据字典视图
查询和日志文件相关的信息
上图中列出了所有和日志文件相关的动态数据字典视图,如果想了解日志文件的详细信息,可以使用v$log视图和v$logfile视图。
- 查看日志组状态信息
查看重做日志文件信息
查询当前正在使用的重做日志文件的信息。
从结果中可以看出,当前数据库正在使用的日志组为group 2,数据库运行在非归档模式,该日志组有一个日志成员,存储目录为/opt/oracle/oradata/orcl/redo02.log
- 通过v$instance视图查看实例信息
上图中结果说明,当然实例名为orcl,主机名为oracleserver,版本号为11.2.0.1.0,实例启动时间为2016年11月27日,状态为allowed。
查看当前数据库的信息
数据库名为orcl,创建时间为2016年11月18日,该数据库运行在归档模式。
动态数据字典视图很好地反映了当前数据库的运行状态信息,对于数据库性能调优和判断系统瓶颈提供了信息支持。通过动态数据字典视图还可以查看控制文件的信息、数据文件的信息和表空间的信息。