Oracle笔记—Trace与Track

2010年9月11日 23:16

Oracle既有一个Track文件,也有一个Trace文件,Track和Trace解释很相近,以至于我长期搞不清楚他们的关系。

 

跟踪文件(trace file)能提供调试信息,服务器遇到问题时,它会生成一个包含大量诊断信息的跟踪文件。如果开发人员设置了sql_trace=true,服务器就会生成一个包含性能相关信息的跟踪文件。我们之所以可以使用这些跟踪文件,是因为oracle是一个允许充分测量的软件。编写数据库内核的程序员在内核中放入了调试代码,而且调试代码相当多,这些调试代码是被程序员有意留在内核中的。

 

修改跟踪文件(change tracking file)是一个可选的文件,这是oracle 10g企业版中新增的,这个文件惟一的目的是跟踪自上一个增量备份以来哪些块已经修改。采用这种方式,恢复管理器(recovery manager,rman)工具就能只备份确实有变化的数据库块,而不必读取整个数据库。
在oracle 10G之前的版本,要完成增量备份,必须读取整个数据库文件,查找自上一次增量备份以来修改的块,如果有一个1T的数据库,只增加了500M的新数据,增量备份就必须读取1T的数据,在其中找出要备份的500M新信息,尽管增量备份存储的数据确实少得多,但它还是要读取整个数据库。
在10G企业版中,oracle运行时,如果块被修改,oracle可能会维护一个文件,告诉RMAN哪些块已经修改。创建这个修改跟踪文件的过程相当简单,只需要通过ALTER DATABASE命令就可以完成:

Oracle笔记

2010年9月10日 05:08

alter database backup controlfile to trace;

虽然曾经说过凡是“alter database”的都不能在数据库打开的情况下修改memory,但是这句语句似乎是例外。输入后,trace文件即生成在了$ORACLE_BASE/admin/<sid>/bdump下,可以通过时间(Linux命令: ll -t)去寻找这个文件,打开就可以找到控制文件的恢复SQL语句,似乎还有两个版本,一个NORESETLOGS版本和一次RESETLOGS版本。

 

/*NORESETLOGS版本*/
STARTUP NOMOUNT  //这里没分号?大概startup语句就是不加分号的。
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG

    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/home/oracle/oracle/oradata/orcl/redo01.log'  SIZE 50M,
  GROUP 2 '/home/oracle/oracle/oradata/orcl/redo02.log'  SIZE 50M,
  GROUP 3 '/home/oracle/oracle/oradata/orcl/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/home/oracle/oracle/oradata/orcl/system01.dbf',
  '/home/oracle/oracle/oradata/orcl/undotbs01.dbf',
  '/home/oracle/oracle/oradata/orcl/sysaux01.dbf',
  '/home/oracle/oracle/oradata/orcl/users01.dbf',
  '/home/oracle/oracle/oradata/orcl/example01.dbf'
CHARACTER SET WE8ISO8859P1
;
 
/*RESETLOGS版本*/
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 '/home/oracle/oracle/oradata/orcl/redo01.log'  SIZE 50M,
  GROUP 2 '/home/oracle/oracle/oradata/orcl/redo02.log'  SIZE 50M,
  GROUP 3 '/home/oracle/oracle/oradata/orcl/redo03.log'  SIZE 50M
-- STANDBY LOGFILE
DATAFILE
  '/home/oracle/oracle/oradata/orcl/system01.dbf',
  '/home/oracle/oracle/oradata/orcl/undotbs01.dbf',
  '/home/oracle/oracle/oradata/orcl/sysaux01.dbf',
  '/home/oracle/oracle/oradata/orcl/users01.dbf',
  '/home/oracle/oracle/oradata/orcl/example01.dbf'
CHARACTER SET WE8ISO8859P1
;