下面是修改数据的简单过程:
1)开始一个事务,事务是包含一组数据库操作的逻辑工作单元。
2)在缓冲区中寻找要修改的数据,如果没有找到,那么就从数据文件中找到这个数据,并且将其加载到数据缓冲区中。
3)修改缓冲区中的数据块,并将修改的结果保存到日志缓冲区中。因为此时缓冲区中的数据与数据文件中的数据不一致,
因此将这种数据称之为“脏数据”
4)当用户提交数据的时候,LGWR进程会将缓冲区中的数据和新生成的SCN写入到重做日志文件中,。
但是为了减少I/O操作,Oracle不会立即将脏数据写入到数据文件当中。
5)如果发生检查点(CheckPoint,检查点是一个事件,当这个事件发生的时候,
DBWn进程将把SGA中所有改变的数据库缓冲区写入到数据文件中)。则CKPT进程唤醒DBWn进程,
更新数据库中的所有的数据文件和控制文件,并且标记最新的检查点,从而下一次更新从最新的检查点开始。
--------------------------------------------------------------------------------
通常在执行SHUTDOWN NORMAL和SHUTDOWN IMMEDIATE语句的时候,会触发Checkpoint事件
当发生Checkpoint事件的时候,Oracle会将SCN写入到下面的四个地方:
1)系统检查点SCN(SYSTEM CHECKPOINT SCN)
当一个CheckPoint动作完成之后,Oracle会将系统检查点的SCN保存到控制文件中,可以从视图V$DATABASE中查看到系统检查点SCN的值,
代码如下:
SELECT CHECKPOINT_CHANGE# FROM V$DATABASE;
2)数据文件检查点SCN(DATAFILE CHECKPOINT SCN)
当一个CheckPoint动作完成之后,Oracle会将每个数据文件的SCN保存到控制文件中。
可以从系统视图V$DATAFILE中看到数据文件检查点SCN的值,
代码如下:
SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE;
3)启动SCN(START SCN)
Oracle把每个数据文件的检查点SCN存储在每个数据文件的文件头中,称为启动SCN。
因为在数据库实例启动的时候,Oracle会检查每个数据库文件的启动SCN与控制文件检查点SCN是否一致,
如果不一致的话,则从重做日志文件中找到丢失的SCN,重新写入数据文件中进行恢复。
可以从系统视图V$DATAFILE_HEADER中查看到启动SCN的值,
代码如下:
SELECT NAME,CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER;
4)结束SCN(STOP SCN)
每个数据文件的结束SCN都保存在控制文件中。正常情况下,所有处于联机状态读写模式下的数据文件的SCN都为NULL。
可以从系统视图V$DATAFILE中查看到结束SCN的值,
代码如下:
SELECT NAME,LAST_CHANGE# FROM V$DATAFILE;
数据库正常关闭(执行SHUTDOWN NORMAL和SHUTDOWN IMMEDIATE)的时候,会触发CHECKPOINT事件,
将重做日志文件中的数据写入数据文件中,并且将上面的4中SCN都更新为最新的值。
当Oracle数据库正常启动并且运行的时候,控制文件检查点SCN,数据文件检查点SCN,每个数据文件中的启动SCN都是一致的,
控制文件中的每个数据文件的结束SCN都是NULL。
在需要的时候,系统会自动根据时间戳自动生成新的SCN,可以从DUAL表中查看到当前系统生成的最新的SCN,代码如下:
SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
-----------------------------------------------------------------------------------
应用场景99:查看控制文件的信息
应用场景100:创建初始控制文件
应用场景101:创建控制文件副本
应用场景102:创建新的控制文件
SELECT MEMBER FROM V$LOGFILE;
SELECT NAME FROM V$DATAFILE;
应用场景103:恢复空进文件
1.控制文件被破坏,但存储控制文件的目录仍可以访问:
使用SHUTDOWN命令关闭数据库实例,然后操作系统命令将控制文件副本复制到控制文件的目录下,最后使用STARTUP命令开启数据库实例。
2.存储介质被破坏,导致存储控制文件的目录无法访问
首先关闭数据库实例,然后使用操作系统命令将控制文件副本复制到一个新的可以访问的目录下。修改contro_files参数,将无效的控制文件目录修改为新的目录。最后,使用STARTUP命令打开数据库实例。
应用场景104:删除控制文件
步骤:
(1)关闭数据库
(2)编辑CONTROL_FILES参数的值,删除指定的控制文件信息。
(3)将要删除的控制文件被分到其他介质,让后使用操作系统命令将文件删除。
(4)重启数据库
应用场景105:查看数据文件信息
SELECT NAME,STATUS,BYTES FROM V$DATAFILE;
应用场景106:创建数据文件
创建表空间,同时创建一个50MB的数据文件
CREATE TABLESPACE MYTABS DATAFILE 'C:\Users\Administrator\Desktop\test\mytemfile01.dbf' SIZE 50M
创建临时表空间,创建10MB的临时文件
CREATE TEMPORARY TABLESPACE TEMTBS TEMPFILE 'C:\Users\Administrator\Desktop\test\mytemp01.dbf'SIZE 50M ENTENT MANAGEMENT LOCAL;
使用alter tablespace语句修改表空间,可以使用add datafile关键字向表空间店家文件
ALTER TABLESPACE MYTABS ADD DATAFILE 'C:\Users\Administrator\Desktop\test\mydata.dbf' SIZE 50M;
应用场景108:修改数据文件的在线状态
将在线的文件修改为脱机状态
ALTER DATABASE DATAFILE 'C:\Users\Administrator\Desktop\test\USERS01.DBF' OFFLINE;
指定数据文件设置成在线状态
ALTER TABLESPACE HRMAN DATAFILE ONLINE;
应用场景109:删除数据文件
删除表空间的mytab,同时删除数据文件
DROP TABLESPACE MYTAB INCLUDING CONTENTS CASCADE CONSTRAINTS;
删除指定的数据文件
ALTER DATABASE DATAFILE 'C:\Users\Administrator\Desktop\test\MYTAB.DBF' OFFLINE DROP;
应用场景110:查看重做日志信息
查看查询视图V$LOGFILE
SELECT GROUP#,STATUS,MEMBER FROM V$LOGFIL