zoukankan      html  css  js  c++  java
  • Oracle的存储的三大物理文件

     

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    一、控制文件(Control File):保存有关数据库的结构信息!

        控制文件是一个小型的二进制文件,可以记录数据库的物理结构。包括:

        * 数据库名称
        * 数据文件和日志文件的名称和位置
        * 数据库创建的时标
        * 当前日志的序号
        * 检验点信息

        一般Oracle数据库创建时都会创建至少两个或两个以上的控制文件。

    二、控制文件的标准

        1、控制文件的文件名

        由control_files参数来指定控制文件名。
        若没有指定该参数,则生成默认文件名,默认文件名在各个操作系统中各不相同

        2、控制文件的复用

        一般不同的控制文件都存放在不同的磁盘,当某个磁盘损坏时可以通过在其他磁盘上的控制文件进行复用,不需要任何的介质恢复。

        * 找到control_files参数列出所有文件名,将相应内容写入所有控制文件
        * control_files中列出的第一个文件是Oracle数据库运行期间唯一可以读取的文件
        * 数据库运行期间,任何控制文件变为不可用,则实例不能继续运行

        3、备份控制文件

        进行以下数据库物理结构改变之后,需要备份控制文件

        * 添加、取消或重命名数据文件
        * 添加或撤销表空间,或更改表空间读写状态
        * 添加或取消重做日志文件

        4、控制文件大小管理

        MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES参数控制


    三、创建控制文件

        1、创建初始化控制文件

        control_files = (/u01/oracle/prod/control01.ctl,
                         /u02/oracle/prod/control02.ctl,
                         /u03/oracle/prod/control03.ctl)

        注:若已经存在与指定名同名的文件,则在create database语句中指定controlfile reuse子句。而且新控制文件与原先控制文件的size必须相同。

        2、创建额外副本、重命名和重定位控制文件

        ① 关闭数据库
        ② 在操作系统中复制、修改原控制文件
        ③ 修改control_files,添加或修改新的控制文件名
        ④ 重新启动数据库

        3、创建新的控制文件

        以下情况可能会需要重新创建新的控制文件:

        * 数据库所有控制文件都收到永久性损坏,且无任何备份
        * 希望修改数据库参数的永久性设置,例如:SID、MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES等参数

        4、创建语句示例

        create controlfile
        set databse april
        LOGFILE GROUP 1 ('/export/home/oracle/oradata/april/redo01_01.log',
                         '/export/home/oracle/oradata/april/redo01_02.log'),
                GROUP 2 ('/export/home/oracle/oradata/april/redo02_01.log',
                         '/export/home/oracle/oradata/april/redo02_02.log'),
                GROUP 3 ('/export/home/oracle/oradata/april/redo03_01.log',
                         '/export/home/oracle/oradata/april/redo03_02.log')
        noresetlogs
        datafile '/export/home/oracle/oradata/april/system01.dbf' size 3M,
                 '/export/home/oracle/oradata/april/rbs01.dbf' SIZE 5M,
                 '/export/home/oracle/oradata/april/users01.dbf' SIZE 5M,
                 '/export/home/oracle/oradata/april/temp01.dbf' SIZE 5M
        MAXLOGFILES 50
        MAXLOGMEMBERS 3
        MAXDATAFILES 200
        MAXINSTANCES 6
        ARCHIVELOG;

        注:create controlfile 语句可能会损坏数据文件和联机重做日志文件,省略文件名会引起文件中数据的丢失,或失去访问完整数据库的能力,所以在使用这条语句时需要特别小心。

        5、创建步骤(严格遵守)

        ① 制作包括数据库所有数据文件和联机重做日志文件的列表,可以使用以下SQL列出清单
            select member from v$logfile; --日志文件
           select name from v$datafile; -- 数据文件

           select value from v$parameter where name = 'control_files' ; -- 控制文件

        ② 关闭数据库(immediate、abort)
        ③ 备份数据库的所有数据文件和联机重做日志文件
        ④ 启动一个新的实例,但不要装载和打开数据库(nomount)
        ⑤ 使用create controlfile语句创建一个新的控制文件
            注:若重命名数据库,或联机重做日志文件丢失,可使用resetlogs子句
        ⑥ 在离线存储设备上存储新的控制文件备份
        ⑦ 编辑control_file初始化参数,若重命名数据库,则编辑DB_NAME参数
        ⑧ 进行数据库恢复(如果需要的话 )
            注:若指定resetlogs,则需要加入using backup control file来恢复数据库
        ⑨ 打开数据库(alter databse open;)

    ==========================控制文件的相关操作==============================

    一、create controlfile错误

        1、检查文件差异

        创建新的控制文件之后会检查数据字典和控制文件之间的矛盾,以检查丢失或多余的文件。

        丢失:
            若数据字典中存在某数据文件,而控制文件中没有,则Oracle在控制文件中创建一个名为MISSINGnnn的占位符入口,表示作为脱机并需要介质恢复的标志。可以通过重命名MISSINGnnn来访问MISSINGnnn对应的真正数据文件,但该文件必须是只读或正常脱机的。
            又因为数据文件需要介质恢复,而RESETLOGS的结果排除了介质恢复的可能,所以当使用了RESETLOGS子句时,必须撤销包含数据文件的表空间。

        多余:
            当控制文件记录的数据文件不在数据字典中时,Oracle会从新的控制文件中删除对数据文件的引用。

        注:无论是丢失还是多余,都会在相应实例的alert.log文件中包含一条解释性消息。

        2、创建过程中的错误

        一般在创建新的控制文件后打开数据库,可能会返回一下错误类型:
        ORA-01173、ORA-01176、ORA-01177、ORA-01215、ORA-01216

        最大的可能是在在创建时有文件丢失或多余文件。
        此时应该找到备份的数据文件和联机重做日志文件,覆盖当前文件,并使用正确的CREATE CONTROLFILE语句重新创建。


    二、备份控制文件

        1、备份控制文件为二进制文件

        alter database backup controlfile to '/oracle/backup/control.bkp';

        2、制作以后可以重新创建控制文件的SQL
      
       alter database backup controlfile to trace;

        3、可以使用RMAN对控制文件进行备份


    三、恢复控制文件

        1、控制文件损坏

        ①关闭实例 ②将未损坏的控制文件副本覆盖已损坏文件 ③打开数据库

        2、磁盘损坏

        ①关闭实例 ②经未损坏控制文件副本复制到新磁盘空间 ③修改control_file参数 ④打开数据库

        也可以先修改control_file参数,然后恢复控制文件,再把


    四、删除控制文件

        ① 关闭数据库
        ② 修改control_file参数
        ③启动数据库
        ④ 在磁盘上删除相应controlfile文件


    五、控制文件信息

        通过一下视图来查看控制文件信息:

        V$CONTROLFILE:控制文件名称
        V$CONTROLFILE_RECORD_SECTION:控制文件记录段信息
        V$PARAMETER:初始化参数CONTROL_FILES的值

    联机重做日志概念 —— 又叫做日志文件
    一、联机重做日志

        1、重做线程

        每个数据库实例的联机重做日志组都是一个联机重做的实例线程。
        不管有没有多路复用,一般每个Oracle都只有一个重做线程,当然RAC中每个实例都包含一个重做线程。

        2、联机重做日志内容

        重做条目记录了可以对数据库重新构造的所有修改数据,包括回滚段。
        重做记录在SGA重做日志缓存区中缓冲,并由LGWR进程写入某个联机重做日志文件。

        事务被提交时,必定需要用LGWR将日志全部从SGA缓存中写入联机重做日志文件,然后才被告知提交完成。
        LGWR还会为每个事务分配一个识别重做记录的系统修改号(SCN)。

        当重做日志缓存填满时LGWR也会将重做条目写入到重做日志文件,这些是可以回滚的。

        3、联机重做日志写入方式

        数据库的联机重做日志组务必要有两个或两个以上,这样可以保持其中一个一直用于写入,另一个用于归档。

        LGWR采用循环写入的方式,即写满一个换下一个。或归档模式则写满了之后归档,否则则直接覆盖。

        4、活动与非活动

        当前正在写入的联机重做日志文件成为“当前的”联机重做日志文件。
        实例恢复时所需的联机重做日志文件称为“活动的”联机重做日志文件。
        实例恢复不用的联机重做日志文件称为“非活动的”联机重做日志文件。

        已经进行存档的联机重做日志文件不能重新使用或重写,知道ARCn存储了这个文件内容。

        5、日志切换 & 日志顺序号

        一般默认在一个文件写满时切换到写一个文件,但是也可以规定时间进行切换,这样就不用理会是否写满。
        也可以手动进行强制切换。

        每次日志切换都会分配一个新的日志顺序号,归档时也将顺序号进行保存。
        每个联机或存档的重做日志文件都通过它的日志顺序号进行唯一标识。


    二、规划联机重做日志

        1、多路复用(Group)

        多路复用是避免损坏联机重做日志文件。
        多路复用时LGWR将同一重做日志信息同时写入多个同样的联机重做日志文件。

        建议必须要使用多路复用(至少两个组)。  
      

        注:当某个成员不可用,则标记为INVALID,并向LGWR跟踪文件和数据报警文件中写入错误信息。不同问题会不同反映。
          * 一个操作成功一个操作失败时:按正常过程进行,忽略不可用成员
          * 日志切换时需要存档而不能访问下一个组时:暂时中断操作,直到归档完成
          * 介质失败,切换时不能访问下一组:关闭数据库,并返回错误信息
          * LGWR写入时不能访问文件:关闭数据库,并返回错误信息

        注:不同的组中不一定需要相同个数的成员。只含有1个组的多路复用是非法的。

        2、日志成员存放在不同磁盘

        设置多路复用时,将日志组成员放置到不同的磁盘上。这样当某磁盘失败时,可以跳过这个成员继续工作。

        另外将成员放置到不同磁盘上可以消除LGWR和ARCn在后台进程对联机重做日志成员的争夺。

        注:数据文件和联机重做日志文件也应该放在不同磁盘上,以减少写数据块和写记录之间出现的竞争。

        3、联机重做日志成员的大小

        规定联机重做日志的大小,以便将填满的组存档到脱机存档介质(磁带或磁盘)的某个单元中。
        例如磁盘上有一个填满的联机重做日志组,且磁盘还有49%的未使用存储空间,此时最好降低联机重做日志文件的大小。

        多路复用时,同一个组中的多有成员比用拥有同样的大小!
        不同组的成员大小不同,但是这样没有什么好处,而且会对检验点的设置带来不便。

        4、联机重做日志文件的数量

        联机日志文件数量的确定最好的方法是测试不同的配置的效果。
        最佳配置:在不妨碍LGWR向重做日志写入信息的前提下,使用尽可能少的组(至少2个组)。

        仔细检查LGWR跟踪文件和数据库报警文件的内容,如果消息表明:因为检验点还没有完成或者组还没有存档的缘故,LGWR不得不频繁得等待组,那么就需要添加组来解决问题。

        注:MAXLOGFILES-最大组数;MAXLOGMEMBERS-最大成员数;要修改这两个参数需要重建数据库或控制文件,所以创建数据库时要慎重。

        5、控制存档延迟

        在数据库中使用联机重做日志归档,然后将归档日志放到备用数据库,通过查询日志来进行和数据库中同样的操作。这两个操作之间存在一个时间间隔,就叫做存档延迟。可以通过ARCHIVE_LAG_TARGET初始化参数来严格限定延迟的时间长度。

        设置了ARCHIVE_LAG_TARGET之后,Oracle将定期检查实例当前的联机重做日志,在发生一下情况时切换日志:
        * n秒钟前创建了当前日志,并估计当前日志存档时间为m秒,而n+m值超过ARCHIVE_LAG_TARGET的值
        * 当前日志包含重做记录

        ARCHIVE_LAG_TARGET = 1800 单位是秒,默认为0,表示禁止该功能

        在选择数值时考虑一下因素:
        * 切换日志所消耗的系统开销
        * 作为日志完整条件的结果,通常日志切换发生的频率
        * 备用数据库可以人寿多少重做损失

        注:当数据库本身就经常切换时,设置这个值没有什么意义,而且当设置值很低时,对性能会产生负面影响。

     

    ==================================对日志文件的操作===============================

    一、创建联机重做日志

        1、创建联机重做日志组
      
       alter database add logfile
        ('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;

       alter database add group 10
        ('/export/home/oracle/oradata/april/log1.log','/export/home/oracle/oradata/april/log2.log') size 500k;


        注:组号必须在1和MAXLOGFILES之间,且不要跳跃使用,否则会耗费数据库控制文件中的空间。

        2、创建联机重做日志成员

       alter database add logfile member '/export/home/oracle/oradata/april/log2.log' to group 2;

       alter database add logfile member '/export/home/oracle/oradata/april/log2.log'
        to ('/export/home/oracle/oradata/april/log2.log','/export/home/oracle/oradata/april/log2.log')

        注:指定组中所有成员也可以表示这个组。新建的日志成员状态为INVALID,首次使用时变成活动状态。


    二、重定位 & 重命名

        ① 关闭数据库:shutdown immediate

        ② 在操作系统中移动或重命名联机重做日志文件

        ③ 启动并装载数据库:startup mount

        ④ 使用rename语句

       alter database rename file
        '/export/home/oracle/oradata/april/log1c.log','/export/home/oracle/oradata/april/log2c.log'
        to '/export/home/oracle/oradata/april/log1a.log','/export/home/oracle/oradata/april/log2a.log'


    三、取消联机重做日志组成员

        1、取消日志组

        要注意:
        ① 至少需要保留两组联机重做日志文件
        ② 日志组状态为“非活动”时才可以取消,如果是“活动”的,则需要进行强制切换
        ③ 要确保日志组已经存档,可以查看V$LOG视图查看是否存档

       alter database drop logfile group 3;

        在执行DROP之后要在操作系统中删除磁盘文件

        2、取消联机重做日志成员

        要注意:
        ① 可以取消原先对称的组中的成员,使其暂时不对称,但最好立即调整这种状况
        ② 实例需要至少两个有效联机重做日志文件,且不能取消最后一个有效成员,使用V$LOGFILE查看状态
        ③ 和取消组一样,需要成员为非活动状态,否则需要进行一次强制切换
        ④ 确保要取消的成员已经经过存档

       alter database drop logfile member '/export/home/oracle/oradata/april/log1.log';

    四、强制切换日志
      
       alter system swith logfile;


    五、校验重做日志文件中的块

        设置DB_BLOCK_CHECKSUM初始化参数为TRUE,则对所有写到磁盘上的Oracle数据块进行校验,包括重做数日志块。
        DB_BLOCK_CHECKSUM参数的默认值是FLASE

        <具体原理未知>

        注:允许校验会对系统产生额外的开销,并且降低数据库性能。需要监视数据库性能以判断校验的代价是否过重。


    六、清除联机重做日志文件

        在联机重做日志损坏时,可以使用CLEAR命令来初始化联机重做日志文件

        但是要注意以下情况不能使用:
        * 仅有两个日志组
        * 受到损坏的重做日志文件属于当前组
      
       alter database clear logfile group 3;
       alter database clear unarchived logfile group 3;
      
        注:清除了恢复备份所需的日志文件,则不能再进行恢复,Oracle将在警报文件中写入一条消息来描述不能恢复的备份。

        注:若清除的日志可以将脱机表空间变成联机状态,则需要在语句中加上UNRECOVERABLE DATAFILE子句。
            因为清除该日志后再也不能把脱机表空间变成联机状态,所以不得不撤销表空间或执行未完成的恢复过程。


    七、查看联机重做日志信息

        V$LOG:显示来自于控制文件的重做日志文件信息
        V$LOGFILE:标识重做日志文件组及其成员的状态
        V$LOG_HISTORY:包含日志历史信息

    数据文件

    一、DataFile管理准则

        1、初始参数DB_FILES

        DB_FILES指出了数据文件信息保留的SGA空间数量,所以也指出了可以为该实例创建的数据文件的最大编号。
        注:更改DB_FILES值需要重启实例后才可生效。

        DB_FILES太小,则在关闭数据库前无法添加超过限制数量的数据文件,太大则消耗内存。

        2、添加DataFile到表空间

        添加DataFile到表空间需要遵循一下的条件:

        * 操作系统对一个进程能够同时打开的文件数加以限制
        * 操作系统对数据文件的数量和大小加以限制
        * Oracle对实例打开的数据库文件最大数量有限制(与操作系统有关)
        * 不能超过DB_FILES所指定的数据文件数量
        * CREATE DATABASE/CONTROLFILE 中 MAXDATAFILES子句的影响

        3、考虑性能的影响

        4、确定数据文件的大小

        SYSTEM表空间的数据文件至少需要150M来包括数据字典和回滚段。
        如果安装了Oracle的其他产品,则可能还需要额外的空间。

        5、适当放置数据文件

        数据文件全部放在一个磁盘驱动器可能会引起竞争,有条件可以分开存放。

        6、与重做日志文件分开存储

        数据文件与重做日志文件存放在一个磁盘容易造成全部数据丢失,尽量分开存放。或保存多个重做日志文件。


    二、创建和添加DataFile

       create tablespace --创建表空间及其数据文件
        create temporary tablespace --创建临时表空间及其临时文件
        alter tablespace ... add datafile --添加一个数据文件
        alter tablespace ... add tempfile --添加一个临时文件
        create database --创建数据库和关联的数据文件
        alter database ... create datafile --创建一个新的空的数据文件代替原来的

        注:推荐指定文件全名,否则按系统默认会比较混乱。


    三、改变DataFile大小

        1、启用/禁用数据文件的自动盘区

        自动盘区指DataFile可以在额定的范围内自动增长,这样可以减少表空间用完时立即干预的必要,也可以确保应用程序不会因为分配盘区而失败或暂停。

        查询数据文件是否为自动盘区,可以查询DBA_DATA_FILES视图的AUTOEXTENSIBLE字段。

        要将数据文件设置成自动盘区,可以在以下语句中加入 AUTOEXTEND ON 子句:
        CREATE DATABASE ...
        CREATE TABLESPACE ...
        ALTER TABLESPACE ...

        添加的举例:

        ALTER TABLESPACE users
        ADD DATAFILE '/export/home/oracle/oradata/april/users03.dbf' SIZE 10M
        AUTOEXTEND ON
        NEXT 512K
        MAXSIZE 250M;

        禁用的例子:

        ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/users03.dbf'
        AUTOEXTEND OFF;


        2、手动调整DataFile

        使用以下语句来手动改变DataFile的大小:
        ALTER DATABASE DATAFILE '/export/home/oracle/oradata/april/stuff01.dbf'
        RESIZE 100M;


    四、修改数据文件可用性

        要使DataFile脱机或联机,有两种方法:

        ① alter database 语句修改单独的DataFile
        ② alter tablespace 语句修改所有的DataFile

        1、在ARCHIVRLOG模式下的更改DataFile状态

        alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' online;
        alter database datafile '/export/home/oracle/oradata/april/stuff01.dbf' offline;

        注:只有在archivelog 模式下才可使用alter database来更改DataFile

        2、在NOARCHIVELOG模式下使DataFile脱机

        由于在NOARCHIVELOG模式下,数据文件脱机后会造成数据的遗失,所以只能使用ALTER DATABASE语句下带有DATAFILE和OFFLINE DROP子句的选项将该DataFile直接取消,例如该DataFile只包含临时段数据,并没有备份时

        alter database datafile '/export/home/oracle/oradata/april/users3.dbf' offline drop;

        3、修改TableSpace中所有DataFile或TempFile的可用性

        ALTER TABLESPACE ... DATAFILE {ONLINE|OFFLINE}
        ALTER TABLESPACE ... TEMPFILE {ONLINE|OFFLINE}

        注:修改某TableSpace中的所有数据文件,但是TableSpace本身的状态不改变。

        总结:

        ① ALTER TABLESPACE可以在数据库装载状态时发布,无需打开
        ② 涉及到系统表空间、撤销表空间、默认临时表空间时,必须是未打开的数据库
        ③ ALTER DATABASE DATAFILE 语句中必须填入文件全名

    =================================DataFile 第二部分=================================


    一、DataFile的重命名和重定位

        1、单个TableSpace的DataFile重命名及重定位

        重命名步骤:

        ① 使包含该DataFile的非SYSTEM TableSpace脱机
            ALTER TABLESPACE users OFFLINE NOEMAL;
        ② 利用操作系统重命名DataFile
        ③ 使用ALTER TABLESPACE RENAME DATAFILE语句改文件名
            ALTER TABLESPACE users
            RENAME DATAFILE '/export/home/oracle/oradata/april/user1.dbf','/export/home/oracle/oradata/april/user2.dbf'
            TO '/export/home/oracle/oradata/april/users01.dbf','/export/home/oracle/oradata/april/users02.dbf';
        ④ 备份数据库

        注:重定位的操作基本上与重命名相同,即在改变名称的基础上也通过操作系统改变了位置。

        2、多个TableSpace中的DataFile重命名和重定位

        ① 确保数据库被装载,但是关闭(必须关闭,与单TableSpace不同)
        ② 利用操作系统重命名及重定位DataFile
        ③ 使用ALTER DATABASE命令
            ALTER DATABASE
            RENAME FILE '/export/home/oracle/oradata/april/sort01.dbf','/export/home/oracle/oradata/april/user3.dbf'
            TO '/export/home/oracle/oradata/april/temp01.dbf','/export/home/oracle/oradata/april/users03.dbf';
        ④ 备份数据库


    二、验证DataFile中的数据块

        如果需要配置Oracle来校验数据块,则需要将DB_BLOCK_CHECHSUM参数项设置为TRUE

        注:DB_BLOCK_CHECHSUM的默认值是FALSE,但可以动态改变。

        工作过程: 当启用块校验时,Oracle为每个写到磁盘的块计算校验和,包括临时块。DBWn为每个块计算校验和后,将其存储在块的头部,下一次Oracle读一个数据块时,使用它来校验和检测块中的讹误,若有错误则返回ORA-01578,并将错误信息写入跟踪文件


    三、查看数据文件信息

        DBA_DATA_FILES:每个数据文件的说明信息,包括所属表空间和文件标识
        DBA_EXTENTS:组成数据库中所有段的盘区,包括盘区的数据文件标识
        DBA_FREE_SPACE:表空间中的空闲盘区,包含该盘区的数据文件标识
        V$DATAFILE:来自控制文件的数据文件信息
        V$DATAFILE_HEADER:包括来自数据文件头部的信息

        SELECT NAME, FILE#, STATUS, CHECKPOINT_CHANGE# "CHECKPOINT"
          FROM V$DATAFILE;

        NAME:数据文件全名
        FILE#:文件号
        STATUS:SYSTEM表空间的DataFile直接标SYSTEM,其他则标ONLINE|OFFLINE(RECOVER)
        CHECKPOINT_CHANGE#:最近的检测点写入的最终SCN

  • 相关阅读:
    ES6 数值类型常用方法
    阿里云如何发布网站
    常用的网站推荐
    笔记一 sql 基础知识
    笔记一 MVC初识
    基础二 面向对象编程
    基础一
    css reset 样式
    CSS 嵌套绝对定位
    ADO
  • 原文地址:https://www.cnblogs.com/lcword/p/11775832.html
Copyright © 2011-2022 走看看