ORACLE深入 第二章 Files

来源:互联网 发布:chrome js获取shift键 编辑:程序博客网 时间:2024/06/03 17:20

ORACLE深入 第二章 Files

Alert Files,Dictionary-Managed and Locally-Managed Tablespaces,Temp Files,Control Files

Online Redo Log,Change Tracking File,DMP file

 日月明王的BLOG:http://sunmoonking.spaces.live.com
           INSTANCRE的配套文件
1,Parameter files:告诉ORACLE在什么地方可以找到CONTROLFILE,内存结构等其他的init parameters.还包括listener.ora,sqlnet.ora,tnsnames.ora
2,Trace files:    server process建立
3,Alert file:
            DATABASE的配套文件
1,Data files:
2,Temp files:
3,Control files: These files tell you where the data files, temp files, and redo log files are, as well as other relevant metadata about their state.
4,Redo log files:
5,Password files:
 
在数据库中读取Alert Files
            可以做一个external table来访问我们需要监控的文本文件。
SQL> create or replace directory data_dir as 'D:/oracle/product/10.2.0/admin/orcl10/bdump/'
  2  /
            目录已创建。
SQL> create table alert_log (text_line varchar2(255) )
  2  organization external
  3  (   type oracle_loader
  4      default directory data_dir
  5      access parameters
  6      (
  7         records delimited by newline
  8         fields
  9         reject rows with all null fields
 10      )
 11      location
 12      (
 13         'alert_orcl10.log'
 14      )
 15  )
 16  reject limit unlimited
 17  /
            表已创建。
            然后就可以查找我们想要的东西了
select to_char(last_time,'dd-mon-yyyy hh24:mi') shutdown,
 to_char(start_time,'dd-mon-yyyy hh24:mi') startup,
 round((start_time-last_time)*24*60,2) mins_down,
 round((last_time-lag(start_time) over (order by r)),2) days_up,
 case when (lead(r) over (order by r) is null )
 then round((sysdate-start_time),2)
 end days_still_up
 from (
 select r,
 to_date(last_time, 'Dy Mon DD HH24:MI:SS YYYY', 'nls_date_language=''american''') last_time,
 to_date(start_time,'Dy Mon DD HH24:MI:SS YYYY', 'nls_date_language=''american''') start_time
 from (
          select r,
          text_line,
          lag(text_line,1) over (order by r) start_time,
          lag(text_line,2) over (order by r) last_time
          from (    ----得到时间和ORACLE启动的记录,20表示年的前两位,有时间记录的地方都表示在发生某件事件,这里得到时间主要是想得到Starting的时间及其前后的时间,好计算这次重起用了多长时间
                   select rownum r, text_line
                   from alert_log
                   where text_line like '___ ___ __ __:__:__ 20__'
                   or text_line like 'Starting ORACLE instance %'
                   )
           )
          where text_line like 'Starting ORACLE instance %'
 )
            如果ALERT里记录没有被删减的话,结果如下
SHUTDOWN STARTUP MINS_DOWN DAYS_UP DAYS_STILL_UP
----------------- ----------------- ---------- ---------- -------------
                     06-may-2004 14:00
06-may-2004 14:24 06-may-2004 14:24 .25 .02
10-may-2004 17:18 10-may-2004 17:19 .93 4.12
26-jun-2004 13:10 26-jun-2004 13:10 .65 46.83
07-sep-2004 20:13 07-sep-2004 20:20 7.27 73.29 116.83
File system 分类
            1,OS
            2, Raw partitions: 未创建文件系统的磁盘分区(raw partition)或逻辑卷(raw logical volume)如何对设备上的数据读写决定于使用它的应用程序。由于对裸设备的操作不通过UNIX的缓冲区,数据在ORACLE的数据缓冲区(BUFFER CACHE)和磁盘之间直接传递,所以使用裸设备在一定程度上能够提高I/O性能,适合I/O量大的系统。另外OPS/RAC (Oracle Parallel Server/Real Application Cluster)环境下,多个节点同时访问同一个数据库,所以CONTROL FILEDATA FILEREDO LOG都必须建在RAW DEVICE上。
                3, 自动存储管理 (ASM) Oracle 数据库 10g 新特性,它为数据库管理员提供了一个简单的存储管理界面,并且该界面在所有服务器和存储平台上都是一致的。作为专门为 Oracle 数据库文件创建的垂直集成文件系统和卷管理器,ASM 提供了异步 I/O 的性能以及文件系统的易管理性。ASM 提供了可节省 DBA 时间的功能,以及管理动态数据库环境的灵活性,并且提高了效率。
      在真正的海量数据库环境中,DBA可能会花费很多的时间来作磁盘管理,比如一个表空间将占满整个磁盘,DBA就需要再添加一块磁盘到操作系统中,然后再在新的磁盘上创建新的数据文件,如果是单个磁盘这倒不是很繁琐,问题是如果原先我们使用的是RAID或者说是LVM,那么现在大量的数据仍然是分布在以前的那些磁盘上,如果我们想让这些数据均匀地分布在以前的磁盘和新增加的磁盘上,我们可能就要耗费一天甚至几天的时间来作原先数据的导出导入。那么如果有一种方法,能实现我们就把一块磁盘加到系统里,然后告诉Oracle我们要用这块盘了,剩下的工作全部由Oracle来完成,该是多好的一件事情!幸运的是,Oracle10g已经提供了这个功能,这就是ASMAutomatic Storage Management)。我们称为自动存储管理Oracle10gASM不但帮助DBA从繁琐的磁盘空间管理中解脱出来,而且更值得关注的是ASM同时提供了条带和镜像的功能,而这些功能原先需要通过单独地配置RAID来实现。
            4. Oracle Cluster File System (OCFS)
Storage Hierarchy in an Oracle Database
        ORACLESTORAGE HIERARCHY在很多书上都有提及,这里不详细说明,只是说些需要注意的地方。
TABLESPACE
SEGMENT
            一个 CREATE语句可以产生0个,1个或多个SEGMENT比如 CREATE TABLE T ( x int primary key, y clob ) 或建立four segments: 一个是TABLE T, 一个是primary key , 两个是CLOB  (一个LOB 一个LOB data).
            CREATE TABLE T ( x int, y date ) cluster MY_CLUSTER连一个segment也不会建立.
Extents
            一个segment由一个或多个extents组成。
BLOCK
            BLOCKORACLE读写的最小单位(I/O单元)。
            注意:BLOCK_SIZE不一定必须设置成2的整倍数。可以设置成5k7k等。
Dictionary-Managed and Locally-Managed Tablespaces
            dictionary-managed tablespace.用数据字典进行管理。当需要空间时,ORACLErecursive SQL访问数据字典,发现SPACE,然后更新字典表中一ROW。对dictionaryUPDATE必须顺序进行,而不能同时进行。而这些recursive sql会消耗temporary tablespaces
            local-managed tablespace用每个data files上的bitmap来管理extents。凡是使用的都设置为1,没使用的设置成0。所以,我们不需要再在DATABASE级别顺序请求空间,而只需要在TABLESPACE级别顺序请求空间
            EXTENT MANAGEMENT LOCAL AUTOALLOCATE 表示由ORACLE自己管理EXTENTS的大小。
            EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K 表示EXTENTS的大小都是512K,每512KBITMAP一个BBIT
            9i及以上版本,如果SYSTEM表空间是locally managed,那么其他的表空间都只能是locally managed,而不能是dictionary-managed
SQL> select tablespace_name||' '||EXTENT_MANAGEMENT from dba_tablespaces;
TABLESPACE_NAME||''||EXTENT_MANAGEMENT
--------------------------------------------------------------------------------
SYSTEM LOCAL
UNDOTBS1 LOCAL
SYSAUX LOCAL
TEMP LOCAL
USERS LOCAL
EXAMPLE LOCAL
MSSM LOCAL
 
7 rows selected.
 
SQL> create tablespace dicman datafile 'd:/oracle/product/10.1.0/oradata/wwmdb/dicman.DBF'
  2  size 10M extent management dictionary;
create tablespace dicman datafile 'd:/oracle/product/10.1.0/oradata/wwmdb/dicman.DBF'
*
ERROR at line 1:
ORA-12913: Cannot create dictionary managed tablespace   
Temp Files
TEMPORARY表空间和文件
            http://sunmoonking.spaces.live.com/blog/cns!E3BD9CBED01777CA!165.entry
 
Control Files
            Parameter file告诉instance controlfile 在什么地方,controlfile告诉instance 什么地方存放databaseredo log file
            Control file也会提供一些其他的信息,比如checkpointdatabase的名字,database创建的时间,archive redo log historyRMAN 的信息等等。
Redo Log Files
            当你插入,删除一条数据,则相应的行会写入REDO LOGS的。但是,当你DROP的时候,只会把DROP这个操作写入REDO,会删除一条记录从sys.obj$等,而不会写入数据,这就是为什么DDL操作无法恢复的原因。
            一些特定操作会记录很少的REDO,比如CREATE TABLE的时候用NOLOGGING(但是recursive SQL还是会记录的,所以只能减少REDO而不能完全没有REDO),
Online Redo Log
            先来了解下面几个重要的概念
            Database buffer cache:是SGA的一部份,当BLOCKS被读到,则BLOCKS会被临时保存在BUFFER CACHE中,以后再读到这些BLOCK就不需要从DISK读了,这时,当我们修改BLOCK的时候,这些修改操作会发生在BUFFER CACHE里,同时这些信息也会保存在REDO LOG BUFFER里,当我们COMMIT的时候,ORACLE并不必须马上写BUFFER CACHE中的信息到DISK内,仅需要将ONLINE REDO LOGS的信息写到REDO FILE里,如果在这个时候(BUFFER CACHE中的信息没有DISK内,但是COMMIT已经发生)系统DOWN机,那么在重起的时候就需要ONLINE REDO LOG而不需要BUFFER  CACHE来提供恢复的数据。REDO的数据足够我们再做一遍UPDATE操作并且COMMIT。所以,只要BLOCK被读到CACHE里并且被修改后没有写入DISK,此时REDO LOG FILE是不能再被使用的。
            为了防止以上情况下导致REDO  LOG  FILE一直被占用而导致process suspendedDBWn需要时常写BUFFER CACHEDISK内,而大多数情况下是CHEKCPOINT触发DBWn的,而大多数情况下CHECKPOINT又是由REDO LOG SWITCH触发的。
            再串起来一下,当从REDO  GROUP  1切换到REDO  GROUP 2的时候,发生CHECKPOINT。此刻,DBWn开始把被REDO FILE 1保护的BUFFER CACHEDIRTY BLOCKS写入到DISK中,在DBWn没有全部写完之前,ORACLE不能REUSE REDO  GROUP 1。如果此时已经开始又要使用REDO GROUP 1 的话ALERT.log会记录如下错误:
Thread 1 cannot allocate new log, sequence 66
Checkpoint not complete
   Current log# 2 seq# 65 mem# 0: c:/ORACLE/ORADATA/ORA10G/REDO02.LOG
            出现如上错误的时候就表示process suspended
            防止上面的问题可以通过增加足够多的ONLINE REDO LOG FILES,或增大REDO LOG FILE的大小,或加快DBWR的速度。
            不同的应用使用REDO LOG的量差别很大,比如Decision  Support System(DSS,query only)DW系统会比OLTP(transaction processing)系统少很多。BLOG也会用很多,还有用户数也会倒是REDO的使用是非线性的。
            做出对REDO LOG的调整还要考虑mean  time  to  recover
Change Tracking File
            Oracle 10g Enterprise Editionk可选组件,目的就是跟踪自上一次RMAN incremental backup后的所有block的改变。在此之前的incremental backup都必须读完全库以发现变化的块,比如你有1T的数据库,每天增加500M,那么RMAN incremental backup就会读完1T500M来得到这500MBLOGK,所以此时的incremental backup虽然能存储比全备要少很多的数据来实现备份,但是必须读整个数据库的全部数据。为了让ORACLE不全读已有的1TORACLE提供了change tracking file去告诉RMN那些BLOCK被改变了。
            可以通过如下方法启用。
alter database enable block change tracking
 using file
'/home/ora10gr1/product/10.1.0/oradata/ora10gr1/ORA10GR1/changed_blocks.bct';
            任何额外的工作都要消耗资源,所以在应用到生产环境前要做好测试。
            通过如下命令来取消
alter database disable block change tracking;
DMP Files (EXP/IMP Files)
            因为9.2 9.1 多了COMPRESSDDL参数,所以在EXP的时候也会带出,那么此时如果IMP9.1 的时候就会有问题。这就是为什么EXP的版本要低于或等于将要使用的IMP的版本。
            DMP文件有平台无关性.也就是说WINDMP 可以用在UNIX .