您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

sp_addsegment

语法


sp_addsegment <segname>, <dbname>, <devname>

参数

segname

是要添加到数据库的 syssegments 表中的新段的名称。段名在每个数据库中都是唯一的。

dbname

指定在其中定义段的数据库的名称。<dbname> 必须是当前数据库的名称或符合限定 sp_addsegment 的数据库名称。

devname

是在其中定位 <segname> 的数据库设备的名称。数据库设备可以有多个与之关联的段。

示例

示例 1

在名为 dev1 的数据库设备上为数据库 pubs2 创建一个名为 indexes 的段:


sp_addsegment indexes, pubs2, dev1

示例 2

在名为 pubs2_dev 的数据库设备上为 pubs2 数据库创建一个名为 indexes 的段:


disk init 
    name = "pubs2_dev", 
    physname = "/dev/pubs_2_dev",
    vdevno = 9, size = 5120
go
alter database pubs2 on pubs2_dev = 2
go
pubs2..sp_addsegment indexes, pubs2, dev1

用法

使用 sp_addsegment 时,还存在一些其它注意事项:

  • 不能在已经具有排它段的设备上创建段。如果试图这样做,则会显示类似以下内容的错误消息:

    

    
    A segment with a virtually hashed table exists on device orders_dat.
    

  • sp_addsegment 为数据库设备定义段名,这些数据库设备通过 disk init 创建并通过 alter databasecreate database 命令分配到特定数据库。

  • 定义段之后,将其用于 create tablecreate index 命令以及 sp_placeobject 过程中,以便在段上放置一个表或索引。

  • 当在特定段上创建了表或索引后,该表或索引所有随后的数据都位于该段上。

  • 使用系统过程 sp_extendsegment 可以将段的范围扩展到同一个数据库所使用的另一个数据库设备。

  • 如果使用 alter database 在数据库使用的设备上对该数据库进行扩展,则还将对映射到该设备的段进行扩展。

  • systemdefault 段会被映射到 create databasealter database 命令中包括的每个数据库设备。logsegment 也会被映射到每个设备,除非您使用 create databaselog on 扩展或使用 sp_logdevice 将其放在单独的设备上。

  • 虽然您可以在同一个设备上既有数据又有日志的数据库中使用 sp_addsegment(例如在不使用 log on 选项创建数据库时),但如果使用以下语句创建数据库,SAP ASE 服务器将返回一条错误消息:

    
    create database <dbname> on <devicename> log on <devicename> with override