1.4 再进一步
1.4.1 X $表
关于X $表,其创建信息我们也可以从数据字典中一窥究竟。
首先我们考察bootstrap $表,该表中记录了数据库启动的基本及驱动:
SQL> select * from bootstrap $;
LINE# OBJ# SQL_TEXT
------------------------------------------------------------------
-1 -1 8.0.0.0.0
0 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024K
MINEXTENTS 1 M
8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,
"SEGBLOCK#" NUMBER)
9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10
INITRANS 2 MAXT
14 14 CREATE TABLE SEG $("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT
NULL,"TYPE#" NUMBE
5 5 CREATE TABLE CLU $("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#"
NUMBER NOT NULL
6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS
2 MAXTRANS 255
7 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS
255 STORAGE (
.... |
这部分信息,在数据库启动时最先被加载,跟踪数据库的启动过程,我们发现数据库启动的第一个动作就是:
create table bootstrap $ ( line# number not null, obj# number not null,
sql_text varchar2(4000) not null) storage (initial 50K objno 56 extents
(file 1 block 377)) |
这部分代码是写在Oracle程序中的,在内存中创建了bootstrap $以后,Oracle就可以从file 1,block 377上读取其他信息,创建重要的数据库对象。从而根据这一部分信息启动数据库,这就实现了数据库的引导,类似于操作系统的初始化。