关于exp 表存储参数的处理

[复制链接]
查看11 | 回复9 | 2005-2-28 12:57:00 | 显示全部楼层 |阅读模式
在 进行数据的exp/imp 碰到一个问题
源数据库比较的大,表设计的时候初始化分配的区比较的大,一个表的initial extent 就大概50M左右
但是现在我只要exp 出来表的结构,不要数据,在dmp 文件中存在createtable ,而且在存储参数中带有initial 参数,分配的值也是比较大的,但是我的imp 源数据库是测试用的,没有那么大的空间,在 imp 的时候也分配了很大initial extent ,导致空间不足,问题是:我如何做才能使imp 的时候忽略表的存储参数呢?
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
imp ... show=y log=...
run the script you got from above
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
使用COMPRESS=n进行导出应该也可以。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
我也遇过这个问题,我的情况是把表导入到测试库后,要移动表的表空间。
只导空结构时也遇上和你一样的麻烦。但我的磁盘够大,,,。
出个点子:写个过程,用DBMS_METADATA.GET_DDL来提取表结构,发现
storage 时,则截断后面那部分,,,
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 lcx_315 发布
[B]imp ... show=y log=...
run the script you got from above [/B]

谢谢提醒,怎么忘记这个了,使用imp 生成创建表的脚本,然后修改一下


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 xjg 发布
[B]使用COMPRESS=n进行导出应该也可以。 [/B]

相反了。compress是指把所有的EXTENT压缩到第1个extent
来存储,若用此参数,则第1个extent 的尺寸更大。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 rchsh 发布
[B]
谢谢提醒,怎么忘记这个了,使用imp 生成创建表的脚本,然后修改一下

[/B]

这个DMP不好操作。
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层


穷人穷过


回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 ZALBB 发布
[B]
相反了。compress是指把所有的EXTENT压缩到第1个extent
来存储,若用此参数,则第1个extent 的尺寸更大。 [/B]

默认是compress=y,也就是把所有空间放在 initial extent 里面,如果设置为compress=n,导出程序会取表当前的存储参数,应该不会有很大的 initial extent 。没试过,看文档上得来的:
COMPRESS
Default: y
Specifies how Export and Import manage the initial extent for table data.
The default, COMPRESS=y, causes Export to flag table data for consolidation into one initial extent upon import. If extent sizes are large (for example, because of the PCTINCREASE parameter), the allocated space will be larger than the space required to hold the data.
If you specify COMPRESS=n, Export uses the current storage parameters, including the values of initial extent size and next extent size. The values of the parameters may be the values specified in the CREATE TABLE or ALTER TABLE statements or the values modified by the database system. For example, the NEXT extent size value may be modified if the table grows and if the PCTINCREASE parameter is nonzero.
回复

使用道具 举报

千问 | 2005-2-28 12:57:00 | 显示全部楼层
最初由 ZALBB 发布
[B]我也遇过这个问题,我的情况是把表导入到测试库后,要移动表的表空间。
只导空结构时也遇上和你一样的麻烦。但我的磁盘够大,,,。
出个点子:写个过程,用DBMS_METADATA.GET_DDL来提取表结构,发现
storage 时,则截断后面那部分,,, [/B]

写个过程,用DBMS_METADATA.GET_DDL来提取表结构,
同时用子程序SET_TRANSFORM_PARAM 来设置输出的内容,如下:
SQL> create table cjf.bbt1 (a number(10),b varchar2(10));
表已创建。
SQL> select dbms_lob.substr(DBMS_METADATA.GET_DDL('TABLE','BBT1','CJF'),dbms_lob
.getlength(DBMS_METADATA.GET_DDL('TABLE','BBT1','CJF')),1) from dual;
CREATE TABLE "CJF"."BBT1"
("A" NUMBER(10,0),
"B" VARCHAR2(10)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS"

SQL> exec DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA. SESSION_TRANSFORM,'ST
ORAGE',false);
PL/SQL 过程已成功完成。
SQL> select dbms_lob.substr(DBMS_METADATA.GET_DDL('TABLE','BBT1','CJF'),dbms_lob
.getlength(DBMS_METADATA.GET_DDL('TABLE','BBT1','CJF')),1) from dual;
CREATE TABLE "CJF"."BBT1"
("A" NUMBER(10,0),
"B" VARCHAR2(10)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "USERS"

SQL>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行