我正在构建一个部署各种数据库模式项和过程的小安装/打包脚本。现在,我只是用它来制作数据库:
创建数据库数据库名称 GO
但是,当我将我的小包指向我的较大数据库时,它们很快就会填满分配的空间。
我不清楚如何在 sybase 上创建一个有空间增长的数据库......是否有某种参数 CREATE DATABASE 参数允许它增长空间,或者我是否必须为每个数据库提供特定的大小?
一些研究证明,制作一个不断增长的设备是一个坏主意......我最终做了这样的事情(为了那些正在寻找的人的利益,我很难弄清楚设备部分......)
-- Data Device
disk init
name = 'do02_data',
physname = 'C:\sybase\data\do02data.dat',
size = '15G',
directio = true,
skip_alloc = true
go
-- Log Device
disk init
name = 'do02_log',
physname = 'C:\sybase\data\do02log.dat',
size = '7G',
directio = true,
skip_alloc = true
CREATE DATABASE do02 on do02_data = '15G' LOG ON do02_log = '7G' -- will take some time
GO
sp_dboption do02, 'select into/bulkcopy', true
GO
如果您之后要使用 BCP,还需要“选择进入/批量复制”。
我只是在我的包中放了说明,供最终用户根据需要修改这些值。
很明显,创建设备有两种不同的方法。
默认方法获取(分配)在创建设备时分配给设备的所有空间。所以创建一个 100Gb 的设备会在文件系统中创建一个 100Gb 的文件
另一种方法只抓取(分配)它需要的空间,但会继续抓取空间,直到达到磁盘初始化中指定的限制。此选项仅适用于 Unix 设备和 Windows 原始系统,并使用指定skip_alloc = true
使用skip_alloc
不会创建动态增长的数据库,它只会延迟分配,直到需要空间。数据库仍然不会比您分配的空间大。
如果要创建一个自动扩展的数据库,Sybase 有使用sp_dbextends
do this的程序。
使用旧版本 Sybase 的用户可以使用阈值 ( sp_addthreshold, sp_modifythreshold, sp_dropthreshold
) 模拟其中的一些。