中国网管论坛's Archiver

花香公子 发表于 2006-12-6 23:19

Expert Oracle Database Architecture 学习笔记

Expert Oracle Database Architecture 学习笔记

Pfile & Spfile(第三章.文件)

一、两种参数文件pfile 和 spfile:
1、参数文件pfile(parameter file),又称初始文件( init file)
  默认文件名为:
  init$ORACLE_SID.ora    (Unix)
  init%ORACLE_SID%.ora   (Windows)
  默认保存位置:
  $ORACLE_HOME/dbs       (Unix)
  %ORACLE_HOME%\DATABASE (Windows)
2、服务器参数文件(server parameter file, SPFILE)
  从ORACLE9i Release 1之后,引入了服务器参数文件Spfile。Spfile是Oracle做出的一个重要改变。有了Spfile,可以消除传统参数存在的两个严重问题:
  ◎可以杜绝参数文件的繁殖。spfile总是存储在数据库服务器上;必须存放在服务器主机本身,不能放在客户机上。对于参数设置来说,这样就可以只有一个“信息来源”。
  ◎无需在数据库之外使用文本编辑器手动地维护参数文件(实际上,更确切地说是不能手动地维护)。
  默认文件名为:
     spfile$ORACLE_SID.ora    (Unix)
     spfile%ORACLE_SID%.ora   (Windows)
  默认保存位置:
     $ORACLE_HOME/dbs       (Unix)
     %ORACLE_HOME%\DATABASE (Windows)
  我的机器上的spfile文件:
  SQL> show parameter spfile
  NAME    TYPE    VALUE
  ------      -------    -------------------------------------------------------------------------------------
  spfile     string    %ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA
  Tom强烈建议对Spfile使用默认位置,因为Spfile在其默认位置,几乎一切都会为你做好。但如果将spfile移到一个非默认的位置,你就必须告诉Oracle到哪里去找Spfile,这又导致遗留参数文件(指init.ora文件)的一大堆问题卷土重来。
3、两种参数文件的转换:
  creste spfile from pfile;
  create pfile='pfilename' from spfile;
  
二、有两种方法可以得到一个实例参数的当前值:
  1、查询V$视图v$parameter
       select value
       from v$parameter
       where name = 'pga_aggregate_target';
  2、在SQL*Plus中使用SHOW PARAMETER 命令,如:
       show parameter pga_agg
  从v$parameter能得到更多信息,因为可以选择更多的列
  但是使用SHOW PARAMETER 命令更为简单,而且它会自动完成“通配”。
三、修改服务器参数
  1、Alter system set parameter=value <comment='text'> <deferred>
                   <scope=memory|spfile|both> <sid='sid|*'>
  其中:
  parameter=value 提供参数名及参数的新值。
  comment='text' 是一个与此参数设置相关的可选注释。这个注释将会出现在V$parameter视图的update_comment字段里。如果使用了相应的选项允许同时保存对spfile文件的修改,注释会写进spfile,即使服务器重启也依然保留。
  deferred指定系统修改只会对以后的会话生效。可以使用以下查询看看哪些参数必须使用deferred:
    select name
    from v$parameter
    where issys_modifiable = 'DEFERRED';
  <scope=memory|spfile|both> 表明本次修改的作用域为 内存/spfile/两者均有
  <sid='sid|*'>主要用在集群环境,默认值为<sid='*'>。这样就可以为集群中任何给定的实例唯一地指定参数设置。
  2、取消spfile中的值设置
    alter system reset parameter <scope=memory|spfile|both> sid='sid|*'  
  这个命令中,sid='sid|*'不再可选。在非RAC环境中,应指定 sid='*'

花香公子 发表于 2006-12-6 23:20

Expert Oracle Database学习笔记--字典管理和本地管理的表空间


Expert Oracle Database Architecture 学习笔记

字典管理和本地管理的表空间

在Oracle8.1.5之前,表空间中管理区段的分配只有一种方法:字典管理的表空间(dictionary-managed tablespace),这种情况下,需要执行递归SQL来得到更多空间,而且对字典的更新必须是串行的,他们不可能同时进行,开销会很大,所以要尽量避免。

在Oracle的早期版本中,这种空间管理问题(递归SQL开销)在“临时表空间”中最常见。空间会频繁地分配和撤销,这些操作必须串行执行,这就大大削弱了并发行,而增加了等待时间。

在7.3版本中,Oracle引入了一个真正的临时表空间(true temporary tablespace)概念,它的管理完全不同,当有人需要临时空间时,Oracle会在内存中的数据结构里查找空间,而不是执行代价昂贵的递归SQL。

在Oracle8.1.5之后,引入了本地管理表空间(locally-managed tablespace)的概念,与Oracle7.3中管理临时表空间的方法一样,本地管理表空间使用每个数据文件中存储的一个位图来管理区段,这样系统只需要在表空间级串行执行一个速度很快的置位操作,而不需要在数据库级串行完成耗时的递归SQl。本地管理的表空间还有另外一些很好的特性,如可以保证区段的大小统一。

确定某个表空间是字典管理或者本地管理:
SQL> select tablespace_name, extent_management from dba_tablespaces;

TABLESPACE_NAME                EXTENT_MAN
------------------------------ ----------
SYSTEM                         LOCAL
UNDOTBS1                       LOCAL
TEMP                           LOCAL
CWMLITE                        LOCAL
DRSYS                          LOCAL
EXAMPLE                        LOCAL
INDX                           LOCAL
ODM                            LOCAL
TOOLS                          LOCAL
USERS                          LOCAL
XDB                            LOCAL

已选择11行。

半支煙 发表于 2007-6-26 13:33

谢谢楼主了  真是辛苦你可

页: [1]

Powered by Discuz! Archiver 6.1.0  © 1999-2008 bbs.bitsCN.com