1.3.9 sql.bsq创建文件和数据库
在CREATE DATABASE的过程中,Oracle会调用$ORACLE_HOME/rdbms/admin/sql.bsq脚本,用来创建数据字典,是一个非常重要的脚本,它存储了数据字典的句子和注释,当我们对某些数据字典感兴趣时,我们可以通过检查文件获得更详细的信息。
在Oracle 11g之前,sql.bsq脚本包含一切SQL语句;自Oracle 11g一开始,该文件被分成多个文件.bsq文件,sql.bsq文件描述了拆分后的文件调用:
rem!!!IMPORTANT!!!
remWhenevernewcolumniscreatedtostoreinternal,userorkernelcolumn
remnumber,besuretoupdatethestructureadtDTinatb.csothatthose
remcolumnswillbeupdatedproperlyduringdropcolumn.
rem!!!
rem
dcore.bsq
dsqlddl.bsq
dmanage.bsq
dplsql.bsq
dtxnspc.bsq
dfmap.bsq
denv.bsq
drac.bsq
dsec.bsq
doptim.bsq
dobj.bsq
djava.bsq
dpart.bsq
drep.bsq
daw.bsq
dsummgt.bsq
dtools.bsq
dexttab.bsq
ddm.bsq
dlmnr.bsq
ddst.bsq
拆分后的基础SQL比如dcore.bsq它包含了控制数据库启动的最核心字典创建语句bootstrap$本文件可以找到其创建语句:
createtablebootstrap$
(line#numbernotnull,/*statementorderid*/
obj#numbernotnull,/*objectnumber*/
sql_textvarchar2("M_VCSZ")notnull)/*statement*/
storage(initial50K)/*toavoidspacemanagementduringIORI*/
///*"//"requiredforbootstrap*/
提示:sql.bsq相关文件值得每一项研究Oracle认真阅读和理解数据的人。
sql.bsq文件的位置是一个隐含的初始参数(_init_sql_file)的控制:
SQL>@GetParDescrb.sql
Entervalueforpar:init_sql
NAMEVALUEDESCRIB
--------------------------------------------------------------------------------
_init_sql_file?/rdbms/admin/sql.bsqFilecontainingSQLstatementstoexecuteupon
databasecreation
若在数据库创建过程中,Oracle无法找到sql.bsq如果文件,数据库创建将出错。可以测试删除。sql.bsq查看数据库创建过程:
SQL>startupnomount;
ORACLEinstancestarted.
SQL>@CreateDB.sql
CREATEDATABASEeygle
*
ERRORatline1:
ORA-01092:ORACLEinstanceterminated.Disconnectionforced
此时,警告日志(alert_.log)中会记录以下信息:
FriAug1815:45:492006
Errorsinfile/opt/oracle/admin/eygle/udump/eygle_ora_3632.trc:
ORA-01501:CREATEDATABASEfailed
ORA-01526:errorinopeningfile'?/rdbms/admin/sql.bsq'
ORA-07391:sftopn:fopenerror,unabletoopentextfile.
Error1526happenedduringdbopen,shuttingdowndatabase
USER:terminatinginstanceduetoerror1526
这就是sql.bsq文件在数据库创建过程中的作用。知道这个内容后,我们甚至可以手动修改sql.bsq文件可以更改数据库字典对象参数,从而创建或测试特殊要求的自定义数据库,也可以修改_init_sql_file重定位参数sql.bsq文件的位置(但通常不建议更改)。
sql.bsq文件中包含的数据库核心信息非常重要。很多时候,这个文件可以帮助我们回答技术疑惑。
【责任编辑:book TEL:(010)68476606】
点赞 0