關於 informix 中檢視錶所在資料庫空間的問題

liahtobjtosh發表於2009-12-09
關於 informix 中檢視錶所在資料庫空間的問題[@more@]

關於 informix 中檢視錶所在資料庫空間的問題
最近想查一個表所在的資料庫空間,結果還是挺麻煩的,如下:
一、如果建表的時候沒有使用 in 指定資料庫空間(或者表也沒有分段),則用 dbschema -d 資料庫名 -t 表名 -ss 是看不到該表所處的資料庫空間的。見例1.1
(在 《IBM Informix Dynamic Server管理員指南》11.5版本的P2-22可以看到“可以在建立表(通常用 create table 的 in dbspace 選項)時,透過命名資料庫空間將表放到特定的資料庫空間中。當您不指定資料庫空間時,資料庫伺服器會將該表放置在資料庫駐留的資料庫空間中。”)
例1.1
> create table lilei(c1 int);

Table created.

> !dbschema -d nmosdb -t lilei -ss

DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC4DE

{ TABLE "informix".lilei row size = 4 number of columns = 1 index size = 0 }
create table "informix".lilei
(
c1 integer
) extent size 16 next size 16 lock mode page;

revoke all on "informix".lilei from "public" as "informix";

> drop table lilei;

Table dropped.

> create table lilei(c1 int) in fmdbs;

Table created.

> !dbschema -d nmosdb -t lilei -ss

DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC4DE
{ TABLE "informix".lilei row size = 4 number of columns = 1 index size = 0 }
create table "informix".lilei
(
c1 integer
) in fmdbs extent size 16 next size 16 lock mode page;

revoke all on "informix".lilei from "public" as "informix";
>

二、 使用系統表 SYSFRAGMENTS 的 partname 欄位。
如果這個表沒有分段,或者這個表沒有索引(即使建立表時使用 in 選項),則在這個系統表中是查不到的。見例1.2
例1.2
> drop table lilei;

Table dropped.

> create table lilei(c1 int);

Table created.

> select * from sysfragments where tabid in(select tabid from systables where tabname='lilei');

No rows found.

> create index ix_lilei on lilei(c1);

Index created.

> select * from sysfragments where tabid in(select tabid from systables where tabname='lilei');
fragtype I
tabid 547
indexname ix_lilei
colno 0
partn 25166354
strategy I
location L
servername
evalpos 0
exprtext
exprbin
exprarr
flags 2
dbspace nmosdbs
levels 1
npused 1.000000000000
nrows 0.00
clust 0.00
partition nmosdbs

1 row(s) retrieved.

例1.3 (接例1.2)
> !dbschema -d nmosdb -t lilei -ss;

DBSCHEMA Schema Utility INFORMIX-SQL Version 11.50.FC4DE

{ TABLE "informix".lilei row size = 4 number of columns = 1 index size = 9 }
create table "informix".lilei
(
c1 integer
) extent size 16 next size 16 lock mode page;

revoke all on "informix".lilei from "public" as "informix";


create index "informix".ix_lilei on "informix".lilei (c1) using
btree in nmosdbs;

>
三、在建立索引時如果不指定 in 選項,則索引與表處於同一個資料庫空間,所以也可以在有索引且建立索引時沒有使用 in 選項的表上使用 dbschema -ss 來看這個表所在的資料庫空間,見例1.3

那麼我現在就有一個問題:如何檢視一個沒有索引,且在建立表時沒有使用 in 選項的非分段表所處在資料庫空間?難道只能按照以下方法了嗎?如果有人知道,也請麻煩告訴我一下,先謝謝啦!
在 《IBM Informix Dynamic Server管理員指南》11.5版本的P2-22可以看到“可以在建立表(通常用 create table 的 in dbspace 選項)時,透過命名資料庫空間將表放到特定的資料庫空間中。當您不指定資料庫空間時,資料庫伺服器會將該表放置在資料庫駐留的資料庫空間中。”
即這類表的資料庫空間與該表所在資料庫的資料庫空間一致。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22565551/viewspace-1029528/,如需轉載,請註明出處,否則將追究法律責任。

相關文章