ORACLE的实例的浅谈
【摘 要】ORACLE实例=后台进程(后台进程使用的PGA)+进程所使用的内存(SGA),实例是一个临,时性的东西,你也可以认为它代表了数据库某一时刻的状态!数据库=重做文件+控制文件+数据文件+临时文件,数据库是永久的,是一个文件的集合。
【关键词】ORACLE;数据库;操作系统
ORACLE实例和数据库之间的关系
1.临时性和永久性
2.实例可以在没有数据文件的情况下单独启动startup nomount, 通常没什么意义
3.一个实例在其生存期内只能装载(alter database mount)和打开(alter database open)一个数据库
4.一个数据库可被许多实例同时装载和打开(即RAC),RAC环境中实例的作用能够得到充分的体现!
在Oracle领域中有两个词很容易混淆,这就是“实例”(instance)和“数据库”(database)。
作为Oracle术语,这两个词的定义如下:
数据库(database):物理操作系统文件或磁盘(disk)的集合。使用Oracle 10g的自动存储管理(Automatic Storage Management,ASM)或RAW分区时,数据库可能不作为操作系统中单独的文件,但定义仍然不变。
这两个词有时可互换使用,不过二者的概念完全不同。实例和数据库之间的关系是:数据库可以由多个实例装载和打开,而实例可以在任何时间点装载和打开一个数据库。一组操作系统进程(或者是一个多线程的进程)以及一些内存;这些进程可以操作数据库。
而数据库只是一个文件集合(包括数据文件、临时文件、重做日志文件和控制文件)。
在任何时刻,一个实例只能有一组相关的文件(与一个数据库关联)。大多数情况下,反过来也成立:一个数据库上只有一个实例对其进行操作。不过,Oracle的真正应用集群(Real Application Clusters,RAC)是一个例外,这是Oracle提供的一个选项,允许在集群环境中的多台计算机上操作,这样就可以有多台实
例同时装载并打开一个数据库(位于一组共享物理磁盘上)。数据字典(Data Dictionary)是Oracle数据库的一个重要组成部分,是元数据(Metadata)的存储地点。
数据字典记录了一下内容:
◎所有数据库Schema对象的定义(表、视图、索引、簇、同义词、序列、过程、函数、包、触发器等)
◎数据库的空间分配和使用情况;
◎字段的缺省值;
◎完整性约束信息;
◎Oracle用户名称、角色、权限等;
◎审计信息;
◎其他数据库信息。
通常所说的数据字典由4个部分组成:
◎内部RDBMS(X$)表
◎数据字典表
◎动态性能视图(V$)
◎数据字典视图
内部RDBMS(X$)表:
X$表示加密命名的,Oracle不做文档说明,Oracle通过X$表建立起大量视图提供用户查询管理数据库之用;
X$表是在数据库启动时由Oracle应用程序动态创建,并且不允许sysdba之外的用户直接访问。
SYS@orclnew> set autotrace traceonly;
SYS@orclnew> select * from v$parameter;
可以看到所有的东西来自两个内部表:X$KSPPI & X$KSPPCV
另外一个有意思的X$表:X$KVIT
(Kernel Layer Performance layer V Information tables Transitory Instance parameters )
SYS@orclnew> select kvittag,kvitval,kvitdsc from x$kvit;
kcbldq 25 large dirty queue if kcbclw reaches this
//脏缓冲(Dirty Buffers) 阈值(threshold)
kcbfsp 40 Max percentage of LRU list foreground can
scan for free
//No Free Buffer LRU上是否有足够的free空间的阈值
静态数据字典视图:
由于X$表和数据字典表通常不能直接访问,Oracle创建了静态数据字典视图来提供用户对于数据字典信息的访问。这些信息通常相对稳定、不能直接就该,所以称之为静态数据字典视图
静态数据字典视图在创建数据库时由 catalog.sql 脚本创建,该脚本的位置:
$ORACLE_HOME/rdbms/admin/catalog.sql
静态数据字典视图的分类:
◎USER_ 类视图包含了用户所拥有的相关对象信息,用户可以通过这个视图查询
自己拥有的对象信息;
◎ALL_ 类视图包含了用户拥有权限访问的所有对象的信息;
◎DBA_ 类视图包含了数据库所有相关对象的信息,用户需要 SELECT ANY TABLE
权限才能访问。
动态性能视图:
动态性能 V$ 视图(Dynamic Performance View) 记录了数据库运行时信息和
统计数据。
数据库启动时,Oracle动态创建了 X$ 表,在此基础上,Oracle创建了 GV$和
V$ 视图。从Oracle 8i 开始,GV$ 视图被引入,含义:Global V$。基本上,每个
V$ 视图都有一个对应的GV$视图存在。
一些特殊的视图记录其他视图的创建方式: V$fixed_view_definition
SYS@ora10g> desc v$fixed_view_definition;
SYS@ora10g> select view_definition from v$fixed_view_definition
where view_name=„V$FIXED_TABLE‟;
SYS@ora10g> select view_definition from v$fixed_view_definition
where view_name=„GV$FIXED_TABLE‟;
通常大部分用户访问的 V$ 视图,并不是视图,而是指向 V_$ 视图的同义词;
而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的)创建的。
SQL 语句中对于对象名的解析顺序:
1.Oracle首先查看在发出命令的用户模式中是否存在表或者视图;
2.如果表或者视图不存在,Oracle检查私有同义词是否存在;
3.如果私有同义词存在,将使用这个同义词所引用的对象;
4.如果私有同义词不存在,检查同名的公有同义词是否存在;
5.如果公有同义词存在,使用这个同义词所引用的对象;
6.如果公有同义词不存在,那么返回错误
“ORA-00942 table or view does not exist.”
因篇幅问题不能全部显示,请点此查看更多更全内容