商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

Life is DUL without it


3 配置DUL
3.1 必需的配置文件
    DUL正常运行需要两个配置文件,一个是init.dul,类似于数据库的init<SID>.ora文件,用于设定DUL运行中的各个参数及指定DUL的运行模式等内容。另外一个为control.dul,这个文件存放的是要Unload数据文件的相关信息。

3.2 参数据文件:init.dul
    参数文件是dul运行必需的文件,下面会给出示例。参数文件用于设定DUL运行中的各个参数及指定DUL的运行模式等内容,例如缓存的大小、Oracle数据块的大小及输出文件格式等参数。Dul的运行参数分为四类,即数据库配置参数、数据字典缓存信息参数、操作系统相关参数及其它常用参数。

3.2.1 数据库配置参数
有如下两项:
Db_block_size:用于指定要做dul操作数据库的数据块的大小。
Compatible :与数据库的compatible参数相似,也是标识数据库的兼容版本的,只不过dul的compatible参数稍简单,不能指定小版本号,有效的值为6,7,8,9,10。Compatible这个参数是的取值也与你的dul版本有关,例如9.x版的dul是不支持Oracle10g的,因此compatible不能设置为10。
大部分dul参数都是有默认值的,不需设定,不过如上两个参数是必须设定的。

3.2.2 数据字典缓存参数
    数据字典缓存参数是以dc_开头的四个参数,用于存放col$,tab$,obj$以及user$这几个数据字典表,相对应的参数为:
dc_columns
dc_tables
dc_objects
dc_users
这几个参数的类型都为number,且应该设的足够大能缓存下col$,tab$,ojb$,users$这几个数据字典表所有的行。其实,如果你设的小一点也没有关系,dul的鲁棒性特别的好,dc_xxxx这些参数会自动升为需要的值,在屏幕打出告警信息,然后继续工作,一点也不影响正常的操作。
告警信息示例:
DUL: Warning: Increased the size of DC_OBJECTS from 10000 to 20000 entries
即我的dc_columns设的是10000,而dul的启动过程中发现这个值是不够的,它自动给调也了20000。

3.2.3 操作系统相关参数
OSD_BIG_ENDIAN_FLAG
    布尔类型。确定dul所工作的操作系统平台是不是byte-swapped的,通常HP,SUN平台machine word是big endian的,即osd_big_endian_flag=TRUE,DEC和Intel平台是little endian的,即osd_big_endian_flag=FALSE。如果你不确实这个值该为TRUE还是FALSE,可以通过如下的命令检测一下(UNIX平台):
$ echo dul |od –x
如果输出的结果为:
0000000 6475 6c0a
0000004
你运行的平台是big endian的,即osd_big_endian_flag=TRUE。
如果输出结果为:
0000000 7564 0a6c
0000004
你运行的平台是little endian的,即osd_big_endian_flag=FALSE。

OSD_DBA_FILE_BITS
    数值类型。这个参数表示的是数据块地址中用于文件数低次序部分的位数。不太好理解,不过这不是问题的关键,知道如何设置,设置多大的值就可以了。
执行如下的语句,不同的返回结果这个参数该设成不同的值。
SQL>select dump(chartorowid(‘0.0.1’)) from dual; Typ=69 Len=6: 8,0,0,0,0,0 -> osd_dba_filebits = 5 (SCO) Typ=69 Len=6: 4,0,0,0,0,0 -> osd_dba_filebits = 6 (Sequent , HP) Typ=69 Len=6: 1,0,0,0,0,0 -> osd_dba_filebits = 8 (NCR,AIX) Typ=69 Len=6: 0,16,0,0,0,0 -> osd_dba_filebits = 12 (MVS) Typ=69 Len=10: 0,0,0,0,0,64,0,0,0,0 ->osd_dba_filebits = 10


OSD_C_STRUCT_ALIGNMENT

    数值类型。这个参数表示的是数据文件头的结构布局,取值有三个0,16和32,大部分的平台这个值要设成32。可以通过如下的查询确定这个参数该设成哪个值。
SELECT * FROM V$TYPE_SIZE WHERE TYPE IN ('KCBH', 'KTNO', 'KCBH', 'KTBBH', 'KTBIT', 'KDBH', 'KTECT', 'KTETB', 'KTSHC'); 如果查询结果是如下这样的,osd_c_struct_alignment需设成32。 COMPONEN TYPE DESCRIPTION TYPE_SIZE -------- -------- -------------------------------- ---------- K KTNO TABLE NUMBER IN CLUSTER 1 KCB KCBH BLOCK COMMON HEADER 20 KTB KTBIT TRANSACTION VARIABLE HEADER 24 KTB KTBBH TRANSACTION FIXED HEADER 48 KDB KDBH DATA HEADER 14 KTE KTECT EXTENT CONTROL 44 KTE KTETB EXTENT TABLE 8 KTS KTSHC SEGMENT HEADER 8 8 rows selected.

对于VAX/VMS及Netware平台,结果通常如下,osd_c_struct_alignment需设成0。

COMPONEN TYPE DESCRIPTION TYPE_SIZE -------- -------- -------------------------------- ---------- K KTNO TABLE NUMBER IN CLUSTER 1 KCB KCBH BLOCK COMMON HEADER 20 KTB KTBIT TRANSACTION VARIABLE HEADER 24 KTB KTBBH TRANSACTION FIXED HEADER 48 KDB KDBH DATA HEADER 14 KTE KTECT EXTENT CONTROL 44 KTE KTETB EXTENT TABLE 8 KTS KTSHC SEGMENT HEADER 8 8 rows selected. OSD_FILE_LEADER_SIZE

    数值类型。这个参数表示的是在Oracle数据文件中,真实的数据文件头块之前的块/字节的数量。对于AIX或DEC UNIX系统平台且使用裸设备做为数据文件时control.dul控制文件要加额外的字节偏移量,这在3.3.1中会提到。
osd_file_leader_size可以参照如下进行设置:  

平台
Unix
1
Vms
0
Desktop
512
Others
未知
 
OSD_WORD_SIZE
数值类型。表示的是machine word的大小,除一些特别的平台如MS-DOS这个值需设置为16外,其它的都为32。

3.2.4 其它常用参数
CONTROL_FILE
用于指定dul控制文件的名字,控制文件默认的名字为control.dul,如果你不想用这个名字,可以通过这个参数进行修改。

LDR_ENCLOSE_CHAR
当导出格式指定为sql*loader格式时,这个参数用于指定每个输出字段用什么括起来,与sql*loader控制文件中的ENCLOSED BY是相对应的。
举例:
//以双引号将输出字段括起来
LDR_ENCLOSE_CHAR = "

LDR_PHYS_REC_SIZE
当导出格式指定为sql*loader格式时,生成的sql*loader的dat文件每一行的大小,取值可以如下:
0 :每一行非固定长度,不论表的一条记录多长,sql*loader的dat文件每行存放一条记录。
>2:指定dat文件每行固定的长度,超过这个长度即换行。

BUFFER
表示的是dul输出缓冲区的大小,默认值为64KB,与性能有关,大一些值可以获得相对更好一些的性能。
举例:
//设定输出绥冲区大小为10MB
Buffer=10485760

EXPORT_MODE
布尔型的取值,这个参数决定dul的输出格式,默认值为FALSE。当其取值为FALSE时输出格式为sql*loader方式。当其取值为TRUE时,输出格式为exp/imp方式,即.dmp文件。
举例:
//以.dmp做为输出格式
Export_mode=TRUE

FILESIZE_IN_MB
这个参数用于指定输出文件最大的大小,在文件系统最大文件有限制的情况下使用,例如一些不支持大文件的文件系统最大文件大小为2GB。当输出文件超过这个参数设定的值时,输出文件为分隔成多个文件。其缺省值为0,表示的是输出文件不进行分隔。
举例:
//单个输出文件大小超2000MB分隔成多个文件 
Filesize_in_mb=2000 3.2.5 参数文件举例 $ cat init.dul #my init.dul dc_columns = 200000 dc_tables = 10000 dc_objects = 10000 dc_users = 40 osd_big_endian_flag =true osd_dba_file_bits = 10 osd_c_struct_alignment = 32 osd_file_leader_size = 1 db_block_size = 8k LDR_ENCLOSE_CHAR = " LDR_PHYS_REC_SIZE = 81 compatible=9 EXPORT_MODE=TRUE BUFFER=10485760

3.3 控制文件:control.dul
3.3.1 控制文件格式说明
    控制文件也是dul运行必需的文件,默认的名字为control.dul,包含了要做unload的数据文件的相关信息,dul通过它,把数据文件号对应到相应的数据文件。
Control.dul的格式为:
Ts# Relative_file# Data_file_name [extra leader offset ] [startblock#] [endblock#]
    TS#,Relative_file#,Data_file_name:这三项源于v$datafile,是必需项目,分别对应v$datafile这个视图中的ts#,rfile#,代表每一个数据文件的表空间号,数据文件号。
    extra leader offset:这一项是可选项目。一些系统环境,如AIX平台,数据文件头包含一些额外的块,这在dul做lseek操作时是需要跳过的,否则会报错,AIX平台这个值为4096。
    startblock#,endblock#:这两项也是可选项。当数据文件有坏块时,可以通过设定这两项跳过坏块,这样一个数据文件可以分多行写。

3.3.2 举例:
3.3.2.1 通过v$datafile生成control.dul的一个有用脚本

SQL> set trimspool on SQL> set pagesize 0 SQL> set linesize 256 SQL> set feedback off SQL> col name format a200 SQL> spool control.dul SQL> select ts#,rfile#,name from v$datafile; SQL> spool off SQL> exit Cat $ cat control.dul SQL> select ts#,rfile#,name from v$datafile; 0 1 /yang/oradata/orcl/system01.dbf 1 2 /yang/oradata/orcl/undotbs01.dbf 3 3 /yang/oradata/orcl/example01.dbf 4 4 /yang/oradata/orcl/indx01.dbf 5 5 /yang/oradata/orcl/tools01.dbf 6 6 /yang/oradata/orcl/users01.dbf 6 7 /yang/oradata/orcl/users02.dbf SQL> spool off

    Control.dul标红这两行需要去掉。

3.3.2.2 control.dul格式示例
示例1:标准格式
6 7 /yang/oradata/orcl/users02.dbf
示例2:假定数据文件users02大小为4094M(4094M去掉2M的文件头),每个数据块大小为8K,该数据文件中223019数据块出现corrupt,可以通过startblock#与endblock#把这个223019数据块跳过。
6 7 /yang/oradata/orcl/users02.dbf 1 223018
6 7 /yang/oradata/orcl/users02.dbf 223020 524032
示例3:AIX平台设定extra block offset,4096为offset值。
6 7 /dev/rusers01 4096 
 
   下一篇:DUL流程详解

1 2 3 4
【内容导航】
第1页: 引言 第2页: 关于DUL
第3页: 如何配置DUL 第4页: 第4页
©版权所有。未经许可,不得转载。
[责任编辑:晓熊]
[an error occurred while processing this directive]