关于 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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22565551/viewspace-1029528/