【发布时间】:2013-11-23 12:46:18
【问题描述】:
我正在构建一个小安装/打包脚本,用于部署各种数据库模式项和过程。现在,我只是用它来制作数据库:
创建数据库数据库名称 去吧
然而, 当我将我的小包指向我的大型数据库时,它们很快就会填满分配的空间。
我不清楚如何在 sybase 上创建具有增长空间的数据库....是否有某种参数 CREATE DATABASE 参数允许它增长空间,或者我是否必须为每个数据库提供特定大小?
【问题讨论】:
我正在构建一个小安装/打包脚本,用于部署各种数据库模式项和过程。现在,我只是用它来制作数据库:
创建数据库数据库名称 去吧
然而, 当我将我的小包指向我的大型数据库时,它们很快就会填满分配的空间。
我不清楚如何在 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 has precedures on using sp_dbextends do this。
使用旧版本 Sybase 的用户可以使用阈值 (sp_addthreshold, sp_modifythreshold, sp_dropthreshold) 模拟其中的一些。
【讨论】: