2013年(350)
分类: Oracle
2013-04-10 13:30:33
===========================================================================
对于很多初接触Oracle的朋友,很容易混淆数据库的概念。由于通常提到数据库(D atabase ),闪现在脑海中的第一印象并不是一个物理的概念,而是有着广泛意义的逻辑概念,如更多的是想到这是的代名词,又或者想到某个具体的存储对象。不过,Oracle对于这些相关概念的定义要严谨得多。
严格来讲,Oracle数据库包括两个组成部分,数据库(Database)只是其中之一,特指存储数据和相关对象的一系列物理文件;另一部分是实例(Instance),特指一系列操作系统进程和它的内存区。
提示:
所谓数据库物理,其实备份的就是数据库的物理文件。只要拥有完整的物理备份,就可以随时将数据库恢复至备份时间点的状态。Oracle 在存储数据时并不是简单进行数据堆砌,而是由一整套严谨并且高效的逻辑结构来管理物理数据的存储,因此Oracle数据库的存储结构也可以分成两大类:物理存储结构和逻辑存储结构。物理存储结构对应一系列不同格式、类型、作用的文件,用来存储对象及其物理数据;逻辑存储结构则是Oracle内部存储、管理数据的方式。
数据库由一系列物理文件组成,不同的文件类型在处理数据时承担着不同任务,有发号施令的(俗称领导),有老实听话,让记啥就记啥的(跟班,又称秘书),有任劳任怨,谁想用就谁用的(一位杨姓兄弟,昵称白劳),有尽忠职守埋头苦干的(俗称保镖)。对号入座的话,分别对应下列类型的文件:
提示:
本章中出现的控制文件、数据文件与本书第二部分“加载数据”中提到的控制文件、数据文件可不是一回事儿哟。第二部分中出现的控制文件和数据文件,是指SQL*L oader 及外部表加载时用到的文件类型,仅只是对应的命令行所使用的文件的称谓。而本章中出现的控制文件和数据文件,是指整个Oracle数据库运行过程中,存储数据库物理结构及实际数据的文件类型。看到控制两字就该知道,这类事物一般都处于领导阶层,Oracle数据库的控制文件虽然个头不大(最大不超过20000个数据块),但是地位非凡,这倒正应了那句话:浓缩的都是精华。Oracle数据库实例启动后(即启动到NOMOUNT模式),要通过加载控制文件确定数据文件、重做日志文件的路径(进入到MOUNT模式),然后才能打开数据库(Finally,OPEN数据库)。因此,没有了控制文件,想顺利启动Oracle数据库是不可能的。
提示:
控制文件的数据块大小与当前数据库的数据块大小有可能并不相同。在版本中,要查看当前Oracle数据库中控制文件的数据块大小,可以通过V$CONTROLFILE视图的BLOCK_SIZE列实现,默认情况下应为16K。当然,控制文件中并不是只有数据文件和重做日志文件的路径(如果仅有这些,这个导字早就被别人领了),还包括数据库名称、数据库创建信息、表空间信息、数据文件状态、日志文件信息、备份信息、检查点信息等。该文件不仅在数据库启动过程中需要,在Oracle数据库运行过程中,控制文件也需要发挥重要作用,如记录检查点的相关信息、归档文件路径、备份信息(假如采用RMAN执行备份的话),以及数据库发生结构修改(流行词汇形容叫领导班子调整,类似添加删除表空间、数据文件、日志文件)等操作都需要同步到控制文件。如果在Oracle数据库运行过程中,由于某些原因导致控制文件无法访问,则数据库也无法继续正常工作。
控制文件是一个二进制文件,不能直接通过文本编辑工具修改,一般这个文件中的内容都是由Oracle自行维护。一个Oracle数据库至少要拥有一个控制文件,鉴于其重要地位(领导嘛),Oracle对其的保护有加,在默认情况下,控制文件就会有三份冗余(就是一模一样的文件存在三份),这三份文件的一致性由Oracle自动维护,当然啦,冗余的数量和冗余文件的位置可以由DBA指定,Oracle建议控制文件至少要有两份冗余,并且存储在不同的磁盘中,以提高该文件的可用性。
查询当前数据库拥有的控制文件,最常用的是通过下列两种方式进行。
SQL> SHOW PARAMETER CONTROL_FILES;
NAME TYPE VALUE
--------------------- ----------- ------------------------------
control_files string F:\ORACLE\ORADATA\JSSBOOK\CONT
ROL01.CTL, F:\ORACLE\ORADATA\J
SSBOOK\CONTROL02.CTL, F:\ORACL
E\ORADATA\JSSBOOK\CONTROL03.CTLSQL> SELECT NAME FROM V$CONTROLFILE;
NAME
--------------------------------------------------
F:\ORACLE\ORADATA\JSSBOOK\CONTROL01.CTL
F:\ORACLE\ORADATA\JSSBOOK\CONTROL02.CTL
F:\ORACLE\ORADATA\JSSBOOK\CONTROL03.CTL=================================================