• Oracle442个应用场景-----------Oracle数据库物理结构


     

    -------------------------Oracle数据库物理结构-------------------------------

    Oracle数据库物理结构
        oracle的数据,实际上是以文件的形式来保存的,文件里出了保存用户的数据之外,
    还须要保存管理数据和日志数据等等。作为一个DBA。必须须要知道自己的数据分别保存在什么位置上,
    并且经验丰富的管理员还应该在设计数据库的时候合理的规划文件的保存位置、初始大小以及增量属性等,
    这样既能满足用户应用程序的须要,还能保证数据库高效的执行。


    每一个Oracle数据都三种类型的文件组成,即控制文件、数据文件以及日志文件。


    这些文件提供了真正的数据存储的物理存储。

    1、控制文件
    每个Oracle数据库都有一个控制文件,用来保存数据库的物理结构信息。
    控制文件包括数据库名、数据库数据文件和日志文件的名字、位置和数据库建立日期等信息。
    数据库的控制文件用于标识数据库和日志文件,当開始数据库操作时,它们必须被打开。


    当数据库的组成更改的时候。Oracle自己主动更新该数据库的控制文件。数据恢复的时候,也须要用到控制文件。
    当数据库打开的时候,Oracle数据库必须写控制文件。没有控制文件,数据库将没有办法装在,恢复数据库的时候也很的困难。

    2、数据文件
    进行数据操作的时候,系统将从数据文件里读取数据。而且存储到Oracle的内存缓冲区中。
    新建或者更新的数据不必马上写入到数据文件里,而是把数据暂时放到内存中。由数据库写入进程(DBWn)决定在适当的时间一次性写入到数据文件里。

    这样能够大大减少訪问磁盘的次数,从而加强系统的性能。

    3、日志文件
    每一个数据库都有两个或者多个日志文件组,用于收集数据库日志。
    日志的主要功能就是记录对数据所作的改动。全部对数据库进行的改动都记录在日志中。
    在出现问题的时候。假设不能将改动数据永久的写入数据文件。则能够通过日志得到改动后的记录,
    从而保证已经发生的操作结果不会丢失。
    日志文件的主要作用是防止数据库在出现问题的时候丢失数据。

    为了防止日志文件本身的故障,
    Oracle同意使用镜像日志。在不同的磁盘上维护两个以上的日志副本。

    --------------------------------------------------------------------------------
    重做日志管理

     重做日志(Redo Log)由两个以上的文件组成,用于保护数据库的全部变化信息.
    每一个Oracle数据库实例都有一个相关的重做日志,从而保证数据库的安全.
       
    重做日志由重做记录组成,而每一个重做记录由一组变化元素组成,变化元素中记录了数据库中每一个单独的数据块的变化情况,比如:
    当用户改动了表中的某一条数据的时候,系统将会自己主动的生成一条重做记录。
    能够使用重做日志来恢复数据库的变化,保护回滚数据。当使用重做数据恢复数据库的时候,
    数据库将从重做日志中读取变化元素。然后将变化应用到相关的数据块其中。
    数据库中至少包括两个重做日志。一个始终保持可写的状态。用于记录数据库的变化,
    另外一个用于归档操作(当系统的achievelog模式打开的时候)。


    那么Oracle是怎么记录重做日志的呢?日志写入进程LGWR负责记录重做日志。
    假设重做日志文件已经被填充满了,那么LGWR将变化数据写入下一个重做日志文件;
    假设最后一个有效的重做日志被填满了。那么LGWR将变化数据写入第一个重做日志。

    为了防止重做日志本身被破坏,Oracle提供了一种多元重做日志,也就是说,系统在不同的位置上自己主动维护日志的两个或者多个副本。
    从安全的角度出发,这些副本的保存位置应该在不同的磁盘上。
        多元性是通过创建重做日志组来实现的,组包含一个重做日志文件和它的多元副本。

    每一个重做日志组由数字来定义。比如组1。组2等等。每一个日志文件必须处于激活状态。这样LGWR就能够同一时候写入这两个日志文件LGWR不会同一时候写入不同组的日志文件。
        在不同的情况下,当重做日志无效的时候,LGWR锁採用的动作例如以下:
    1)LGWR能够写入组中的至少一个成员文件:正常完毕写操作。LGWR写入组中的可訪问的成员文件,忽略不可訪问的成员文件。
    2)在日志切换的时候,LGWR无法訪问下一个组,由于该组须要被归档:暂时停止数据库操作,等待该组能够被訪问或者该组已经被归档。


    3)在日志切换的时候,因为介质被损坏,下一组的全部成员都无法被訪问:ORACLE数据库返回错误。数据库实例被关闭。
    此时须要从有效的重做日志中运行介质恢复操作(数据库恢复操作)。假设数据库的检查点已经超出了丢失的重做日志,
    则不须要进行介质恢复了,由于重做日志中记录的数据写入到数据文件里。如今仅仅须要删除无效的重做日志组。


    假设数据库还没有对失效的日志进行归档操作。则运行ALTER DATABASE CLEAR UNARCHIVED LOG禁止归档操作,
    这样就能够删除日志文件了。
    4)当LGWR写入的时候,全部的组中的成员文件忽然无法訪问:Oracle返回错误,数据库实例被关闭。
    此时,须要从有效的重做日志文件里运行介质恢复操作。假设介质没有被破坏,仅仅是不小心掉线了,则不须要进行介质恢复,
    仅仅要将介质恢复在线,然后让数据库运行自己主动实例恢复就能够了。
       
    能够通过例如以下參数来设置重做日志的数量:
    MAXLOGFILES:在CREATE DATABASE语句中使用MAXLOGFILES參数能够指定每一个数据库中重做日志文件组的最大数量。


    MAXLOGMEMBERS:在CREATE DATABASE语句中使用MAXLOGMEMBERS參数能够指定每一个日志文件组中包括的日志文件的最大数量。


    --------------------------------------------------------------------------------
    归档日志文件和归档模式

        归档日志文件是重做日志文件组成员的备份,它由重做项目和唯一的日志序列号组成。


    当数据库处于归档模式的时候。写日志进程(LGWR)不可以对未归档的重做日志组进行重用和改写操作。
    假设设置了自己主动归档模式。则后台进行ARCn将自己主动的运行归档操作。数据库会启动多个进程归档。确保一旦日志文件被填满立即会被归档。

    能够使用归档日志文件达到下面目的:

    1)恢复数据库
    2)更新备用数据库
    3)使用LogMiner获取数据库的历史信息
    用户能够选择自己主动归档或者手动归档,可是自己主动归档模式更加的方便和快捷。
    LGWR进程向在线重做日志文件写入日志信息。一旦重做日志被写满。则由ARC0进程进行归档操作。


    --------------------------------------------------------------------------------
    SCN

    SCN是System Change Number的缩写。它是数据库的重要机制,能够用来记录和标识运行数据库操作的先后顺序。


    在运行回滚事务、备份以及恢复数据库等操作的时候,数据库操作的先后顺序是很重要的。
       
    SCN是一个仅仅能增大的整数。系统能够保证这个整数是不会越界的。当用户改动数据库中的数据(添加。改动,删除)时,
    Oracle数据库并非马上将其保存到数据文件里,而是将数据保存在缓冲区(buffer cache)中,当提交事务的时候。
    才会将数据写进数据文件。

    以下是改动数据的简单过程:
    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:UsersAdministratorDesktop estmytemfile01.dbf' SIZE 50M

    创建暂时表空间,创建10MB的暂时文件
    CREATE TEMPORARY TABLESPACE TEMTBS TEMPFILE 'C:UsersAdministratorDesktop estmytemp01.dbf'SIZE 50M ENTENT MANAGEMENT LOCAL;

    使用alter tablespace语句改动表空间,能够使用add datafilekeyword向表空间店家文件

    ALTER TABLESPACE MYTABS ADD DATAFILE 'C:UsersAdministratorDesktop estmydata.dbf' SIZE 50M;

    应用场景108:改动数据文件的在线状态

    将在线的文件改动为脱机状态
    ALTER DATABASE DATAFILE 'C:UsersAdministratorDesktop estUSERS01.DBF' OFFLINE;

    指定数据文件设置成在线状态
    ALTER TABLESPACE HRMAN DATAFILE ONLINE;

    应用场景109:删除数据文件

    删除表空间的mytab,同一时候删除数据文件
    DROP TABLESPACE MYTAB INCLUDING CONTENTS CASCADE CONSTRAINTS;

    删除指定的数据文件
    ALTER DATABASE DATAFILE 'C:UsersAdministratorDesktop estMYTAB.DBF' OFFLINE DROP;

    应用场景110:查看重做日志信息

    查看查询视图V$LOGFILE
    SELECT GROUP#,STATUS,MEMBER FROM V$LOGFILE;

    查看视图V$LOG_HISTORY能够显示重做日志的历史信息
    SELECT RECID, FIRST_CHANGE#, NEXT_CHANGE#, RESETLOGS_CHANGE# FROM V$LOG_HISTORY;

    应用场景111:创建重做日志组合成员
    1.创建日志组
    ALTER DATABASE ADD LOGFILE ('log1c.rdo', 'log2c.rdo') SIZE 5000k;

    ALTER DATABASE ADD LOGFILE GROUP 10 ('log1a.rdo', 'log2a.rdo') SIZE 5000k;

    2.创建重做日志成员
    将重做日志文件log3a.rdo加入到编号为10的重做日志组中
    ALTER DATABASE ADD LOGFILE MEMBER 'log3a.rdo' TO GROUP 10;

    应用场景112:重命名重做日志文件

    所需权限:
    alter database系统权限
    拷贝文件到指定文件的操作系统权限
    打开和备份数据库的权限。

    步骤:
    (1)使用shutdown命令关闭数据库
    (2)将重做日志文件拷贝到新的位置吗。然后使用操作系统命名对其进行重命名。


    (3)使用startup mount 命令装载到数据库。
    (4)使用带rename file 子句的alter datafile语句重命名数据库的重做数据文件

    ALTER DATABASE
    RENAME FILE 'log1a.rdo', 'log2a.rdo'
    TO 'log1b.rdo', 'log2b.rdo';
    (5)使用alter database open命令打开数据库

    验证重做日志文件是否被改名
    SELECT GROUP#,STATUS,MEMBER FROM V$LOGFILE;

    应用场景113:删除重做日志组合成员

    删除重做日志组:
    ALTER DATABASE DROP LOGFILE GROUP 10;

    删除重做日志成员:
    ALTER DATABASE DROP LOGFILE MEMBER 'log2c.rdo';

    应用场景114:清空重做日志文件

    ALTER DATABASE CLEAR LOGFILE GROUP 10;

    ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 10;

    应用场景115:指定归档目的地

    指定多个归档目的地的过程例如以下:
    (1)使用SHUTDOWN命令关闭数据库
    (2)使用SERBICE设置有效的网络服务名

    LOG_ARCHIVE_DEST_1 = 'LOCATION = C:appAdministratorproduct11.1.0db_1databasearchive'
    LOG_ARCHIVE_DEST_2 = 'LOCATION = D:appAdministratorproduct11.1.0db_1databasearchive'
    LOG_ARCHIVE_DEST_3 = 'LOCATION = F:appAdministratorproduct11.1.0db_1databasearchive'
    (3)能够编辑初始化參数LOG_ARCHIVE_FORMAT设置文档文件的初始化模式
    LOG_ARCHIVE_DEST_4 = 'SERVICE = standby1'

    LOG_ARCHIVE_FORMAT = arch_%t_%s_%r.arc

    LOG_ARCHIVE_DEST = 'C:appAdministratorproduct11.1.0db_1databasearchive
    LOG_ARCHIVE_DUPLEX_DEST = 'D:appAdministratorproduct11.1.0db_1databasearchive'

    应用场景116:管理归档模式
    归档日志的操作模式分为两种:ARCHIVELOG(归档模式)和NOARCHIVELOG(非归档模式)

    切换归档模式的步骤
    (1)使用SHUTDOWN关闭数据文件
    (2)备份数据库。


    (3)编辑初始化參数文件,设置归档日志文件的位置
    (4)使用STARTUP MOUNT语句归档日志文件的位置
    (5)使用ALTER DATABASE ARCHIVELOG语句切换到归档模式,或是切换到非归档模式。


    (6)使用ALTER DATABASE OPEN语句又一次打开数据库。

    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=4;

    应用场景117:运行手动归档

    设置数据库手动归档模式:
    ALTER DATABASE ARCHIVELOG MANUAL;
    手动归档全部日志文件:
    ALTER SYSTEM ARCHIVE LOG ALL;

    应用场景118:查看当前数据库实例归档模式

    SELECT LOG_MODE FROM V$DATABASE;

    应用场景119:查看日志信息

    应用场景120:使用V$ARCHIVED_LOG视图查看历史归档日志信息

    SELECT NAME, SEQUENCE#, STATUS FROM V$ARCHIVED_LOG;

    应用场景121:使用V$ARCHIVE_DEST视图查看归档目的地的信息

    COL DEST_NAME FORMAT A20
    COL DESTINATION FORMAT A20
    SELECT DEST_NAME, STATUS, DESTINATION FROM V$ARCHIVE_DEST;

    应用场景122:使用V$ARCHIVE_PROCESSES视图查看归档进程信息

    SELECT * FROM V$ARCHIVE_PROCESSES;

    应用场景123:使用V$TEMPFILE视图暂时文件信息

    SELECT RECID, STAMP, THREAD#, SEQUENCE# FROM V$BACKUP_REDOLOG;

    应用场景124:使用V$TEMPFILE查看视图暂时文件信息

    COL NAME FORMAT A40
    SELECT NAME, STATUS, BYTES FROM V$TEMPFILE;

    应用场景125:查看警告日志文件

    SELECT VALUE FROM V$PARAMETER
    WHERE NAME= 'background_dump_dest';

     

  • 相关阅读:
    什么是API
    Maxiee的Vim入门日记(4)——安装windows下的Cscope
    将字符串变成大写----C++实现
    POJ 3254 炮兵阵地(状态压缩DP)
    UIKit和Core Graphics绘图(三)——绘制虚线,椭圆以及饼图
    CRC 模式及实现
    [HDU 1317]XYZZY[SPFA变形][最长路]
    poj 2155 Matrix
    [置顶] Application,Session,Cookie之Application对象
    [Todo] Java及C++ Exception整理
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6970126.html
Copyright © 2020-2023  润新知