段(Segment)是數據庫設備上磁盤空間的邏輯組合,它可以看作是指向一個或多個數據庫設備的標簽。利用段可以控制數據庫對象的存放位置,可以將數據庫對象分類存放到不同的段上。
設備與段之間的關系:多對多關系。一個設備上可以創建多個段,一個段也可以覆蓋多個設備。
1.使用段的優點
a. 控制空間的使用:放在一個段上的數據庫對象不會在段外增長;
b. 提高性能:處於不同磁盤設備上的段可以並行地讀寫;
d.處理大表:利用段,可以將一個大表分段放在獨立的物理設備上,如將一個表的文本或圖象數據存儲另外的一個段上。
2.創建段
sp_addsegment 段名,數據庫名,設備名
說明:在指定設備上為某個數據庫創建一個段。
●擴展段的范圍
sp_exetendsegment 段名,數據庫名,設備名
說明:設備在數據庫中必須可用,否則需要擴展數據庫到新的設備上;指定的段、數據庫、設備必須存在。
●縮小段的范圍:
sp_dropsegment 段名,數據庫名,設備名
說明:帶第三個參數時,該命令並不刪除段,只是段的范圍縮小了。若某個段包含了別的段要獨占的設備,就需要縮小該段的范圍。
3.使用段
●兩個數據庫放在同一設備的不同段上,它們不會相互影響;
●當數據庫增加空間時,增加的空間會自動分配到它的每一個段上;
例如:alter database my_db
on data_dev=50
在data_dev設備上為my_db增加50M空間,這50M空間被自動分配到數據庫的每一個段中。注意:如果data_dev對於數據庫是新的,system和default段會自動擴展到該設備上。
可以使用alter database命令的log on選項分配附加的日志空間。
(1)在段中創建新對象
create table 表名(列名 數據類型)[on 段名]
create [clusterd|non clusterd]index 索引名 on 表名(列名)[on 段名]
注意:按照定義,聚集索引總是與表放在同一段上。
(2)在段上放置現有對象
sp_placeobject 段名,對象名
注意:該命令並不把對象從一個數據庫設備移動到另一設備上,它只影響未來的空間分配。
可以將某個大表的text字段或image字段放置到一個單獨的設備段上。
Sp_placeobject 段名,“表名.字段名”
(3)在段上創建聚集索引
按照定義,聚集索引總是與表放在同一段上。如果在一個段上創建表,而在另一個段上創建聚集索引,則其表與其索引一起移動,整個表將離開創建表的段而遷移到創建聚集索引的段中。通過這種方法,可以快速而方便地把指定表移動到指定的設備上。
(4)系統預定義段
當用戶創建一個數據庫時,Sybase自動創建三個預定義的段:
system段:存放系統表(包括所有用戶對象的定義)
default段:存放用戶創建的各種對象,除非它們明顯地指定到不同的段上。
Logsegment段:存放數據庫的事務日志。
(5)刪除段
刪除段是縮小段范圍的一個特例:
sp_dropsegment 段名,數據庫名
4.使用阈值管理
阈值(Threshold)管理是一種自動監控數據庫自由空間的機制,Sybase的阈值管理允許用戶為數據庫的某個段上的自由空間設置阈值並定義相應的存儲過程。當該段上的自由空間低於所置頭阈值時,Sybase自動運行相應的存儲過程。
在一個實際運行的數據庫中,日志的增長速度一般要高於數據的增長,一旦日志段的自由空間用盡,SQL Server在默認情況下會掛起所有數據操縱事務,客戶端應用程序停止執行。
在每個分離的段上存儲其事務日志的數據庫均自動設置有最後機會阈值(Last Chance Threshold),其阈值是備份事務日志所需的自由空間的估計值。當該段上的自由空間低於所置阈值時,Sybase自動運行名為sp_thresholdaction的存儲過程。該過程的名稱及參數由系統預定義,內容由用戶編寫。下面是一個簡單示例。
CREATE PROCEDURE dbo.sp_thresholdaction
/*本過程參數通過位置傳遞,名稱可以改變,但其定義及順序不能變*/
@db_name varchar(30),/*數據庫名*/
@seg_name varchar(30),/*段名*/
@space_lefe int,/*剩余自由空間*/
@status int/*最後機會阈值,其值為1,其它阈值,其值為0*/
AS
BEGIN
/*用戶編寫過程內容*/
dump transaction @db_name
with truncate_only
END