progress的数据库结构及创建

本文详细介绍了Progress 4GL数据库的结构,包括.st文件、.db文件、.lg文件等,以及如何创建数据库。通过`prostrct`和`procopy`命令,依据.st文件创建数据库,并提供了.st文件的编写格式和示例。
progress的数据库结构及创建

关键字: progress 4GL database 数据库

在逻辑文件体系上,progress数据库有以下几种文件:
.st文件  这是一个结构文件,由数据库创建者手动编写,表示了数据库的物理存储结构. 换句话说,数据库的文件都放在哪里就是由该文件定义的.当然还不仅如此.
.db文件  这是一个数据库控制文件,是由progress生成的.
.lg文件  就是一个文本型的日志文件
.dn文件 这里的n代表数字序号,从1开始. 这类文件存储的是数据库的数据.
.bn文件 n含义同上,表示基本恢复文件(primary Recovery Area)
以上的文件是必有的,还有可选的常用的文件类型:
.an文件 n的含义同上,表示after image area

还有其他的文件类型会在以后用到的时候再说.

存储区域(storage area)
一个存储区域可以包括一个或者多个文件,并且它是数据库中的最大的物理单元.同一张表(索引,...)的数据只能放在一个存储区域里.
在这里一个文件被叫做extent.

存储区域由名字来标示.其中有一些是所有的progress数据库都会有的区域:
"Control Area"
这个区域只包含一个变长文件,也就是.db文件. 这个文件里只包含了两个系统表_area和_area-extent. 这两个表里可以找到所有的存储对象以及文件的位置和大小.

"Schema Area"
这个区域可以包含一系列的定长文件.这里存储了所有的数据库系统和用户信息,以及没有被显式指定到某一个别的存储区域的对象.换句话说,这里是数据库对象缺省的存储区域,除非你明显的改变了这一点.

基本恢复区域(primary Recovery Area)
这个区域可以包含一系列的定长文件以及一个变长文件.变长文件应该是最后一个(按照扩展名里的序号).这个区域像是一个缓冲区.

应用程序数据区域(application data area)
这样的区域正是存放用户数据的地方,名字自取.可以包含一系列的定长文件和一个变长文件,变长文件也要是最后一个.

数据块(block)
数据块是表示在复制的时候拷贝的单位大小,在progress 9里只有四种,1024,2048,4096,8192,单位是字节,换句话说,也就是1k,2k,4k,8k.

当你要创建一个数据库的时候,需要用到命令:
prostrct
procopy

prostrct的命令格式是:
prostrct create db-name db-name.st -blocksize nnnn
这条命令的作用就是根据指定的.st文件来创建相应的数据库文件. blocksize就是块大小.
所以在执行该命令前,有必要检查一下磁盘空间是否足够.

procopy的格式很简单:
procopy 源数据库 目标数据库
这条命令的目的其实就是创建系统表.progress有四个已经建好的空数据库,分别叫empty,empty2,empty4,empty8,分别对应不同的块大小.

怎么撰写.st文件

.st文件必须遵循一定的格式,每一行有如下部分组成:
1)存储区域类型
正像前面描述的那样,有这么几种存储类型,还有对应的标示:
b--基本恢复区域,primary recovery area,也叫bi=before image
a--after image area,简称bi
d--应用数据区域
t--事务区域

2)存储区域的名字
这个主要是针对应用数据区域来说的。因为只有这个区域可以有自己的名字。也就是b开头的行需要有名字。

3):区域号
这是一个数字,相当于给文件名编号,通常是同一个数据域使用同一个区域号。这是可选的。

4),每块记录数
整数。这是可选的

5)路径名
这个就是一个字符串,或者用.来代表当前目录

6)文件类型
可以是f=fixed,r=raw device,v=variable length. 如果没有指定,则默认是可变长度的

7)文件大小
一个大于32的数值,单位是KB

各项之间由空格分割。

比如:
d "Order Info":7,32 /data/mydb f 1024
d "Order Info":7,32 /data/mydb v 4194304

假定数据库的名字是mydb,那么progress会根据这两行创建这样两个文件(这里是假定在unix服务器上,所以使用了unix路径):
/data/mydb/mydb_7.d1
/data/mydb/mydb_7.d2
mydb_7.d1大小是1024KB,而mydb_7.d2则是32KB,因为是变长文件,所以初始大小是32. 最大是4194304KB.
也就是说,文件名会以数据库名开始,然后下划线连接区域号,扩展名是.dn,n从1开始。

对于a,b的文件类型,文件名是mydb.an/mydb.bn, 对于t类型,则是mydb.tl

如果路径名还有空格,则需要使用如下格式:
!"/mypath/sub path"

下边是一个结构描述文件mydb.st:
#对于bi区域,没有名字,这里定义了一个变长文件,最大大小由操作系统决定
b /usr2/bi
#
# 下面定义了Schema Area,包含了一个变长文件,在当前目录
d “Schema Area” .
#
# 下面定义了三个属于ai的定长文件,每个是1MB
a /usr3/ai f 1024
a /usr3/ai f 1024
a !”/usr3/ai data” f 1024
#
# 下面是一个十五日志区域文件
t . f 4096
#
d “Employee”:7,32 /usr1/emp f 1024
d “Employee”:7,32 /usr1/emp
#
d “Inventory”:8,32 /usr1/inv f 1024
d “Inventory”:8,32 /usr1/inv
#
d “Cust_Data”:9,32 /usr1/cust f 1024
d “Cust_Data”:9,32 /usr1/cust
#
d “Cust_Index”:10,32 /usr1/cust f 1024
d “Cust_Index”:10,32 /usr1/cust
#
d “Order”:11,32 /usr1/ord f 1024
d “Order”:11,32 /usr1/ord
#
d “Misc”:12,32 !”/usr1/misc data” f 1024
d “Misc”:12,32 !”/usr1/misc data”

经过运行:
prostrct create mydb mydb.st
那么如下文件会创建:
/usr2/bi/mydb.b1
/usr1/mydb.d1
/usr3/ai/mydb.a1
/usr3/ai/mydb.a2
/usr3/ai/mydb.a3
/usr1/mydb.t1
/usr1/emp/mydb_7.d1
/usr1/emp/mydb_7.d2
/usr1/inv/mydb_8.d1
/usr1/inv/mydb_8.d2
/usr1/cust/mydb_9.d1
/usr1/cust/mydb_9.d2
/usr1/cust/mydb_10.d1
/usr1/cust/mydb_10.d2
/usr1/ord/mydb_11.d1
/usr1/ord/mydb_11.d2
/usr1/misc data/mydb_12.d1
/usr1/misc data/mydb_12.d2

接下来运行:
procopy $DLC/empty8 mydb
那么所有的系统表文件就会创建.现在一个空的数据库已经创建好,可以连接了.

注意$DLC表示的是progress的安装路径,是一个环境变量,就像JAVA_HOME一样.

附注:
这里是一个.st文件定义的语法,在帮助文件里可以找到:
 CR = blank line
LINE = comment | areatype pathname [ sizeinfo ]
comment = * | : | #
areatype = a | b | d | t [ areainfo ]
areainfo = [“areaname”[:areanum ][, recsPerBlock ]  ]
        areaname = string
        areanum = numeric value
        recsPerBlock = numeric value
pathname = . | string  | !”string 2"
sizeinfo = extentType size
        extentType = fixed (f) | raw device (r) | variable length (v)
        size = numeric value > 32

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值