各位大虾进来看一下,答出者有分.

SYUEHOKO 2008-05-09 05:04:19
ORACLE,IMP 进数据库时,如何才能不让数据导入USER里,关系到权限,先赋DBA. 本人尝试过 :
myoradb 是自己建的空间名.临时表空间为TEMP.
revoke unlimited tablespace from myoradb;
alter user myoradb quota 0 on users;
alter user myoradb quote unlimited on myoradb;

----------查出是否有自己创建的表空间名出现在USER里.
select * from all_tables where tablespace_name='USERS';
的确不再导进USER了,但是我一个200多M的DMP文件导入,我空间放大至2G,导入时还是出错.
进MANGER 查看,自己的空间利用率已经是100%了.直接怀疑其是如何占用空间的.
其后,换成myoradb空间大小自动增长后,问题解决.但是空间被吃掉了几个G,对此,不能理解.
请高手来解答.

...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SYUEHOKO 2008-05-13
  • 打赏
  • 举报
回复
各位:
首先,先谢谢楼上各位.经本人测试发现原来,本公司的人之前在建数据库的时候就没有注意,将自己建的空间,建在USER上了..

CREATE TABLE GROUPMST
(
GROUPID VARCHAR2(12 BYTE) NOT NULL,
GROUPNM VARCHAR2(32 BYTE) NOT NULL,
UPDATEYMD CHAR(19 BYTE),
UPDATEMAN VARCHAR2(6 BYTE),
ACTIONFLG CHAR(1 BYTE) NOT NULL,
TRANSFLG CHAR(1 BYTE) DEFAULT '1'
)
TABLESPACE USERS --<注意这里> 应该是 TABLESPACE (自己的空间名)
PCTUSED 0
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE GROUPMST ADD (
PRIMARY KEY
(GROUPID)
USING INDEX
TABLESPACE USERS --<注意这里> 应该是 TABLESPACE (自己的空间名)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS 2147483645
PCTINCREASE 0
));


所以各位同学应该注意了,这是ORACLE 自己的一个特点.如果你不指定建表在自己的空间上,就会默认成USERS里,如上:
以上的表是通过TOAD手动建立的.这样建出来的表,就会导致USERS表空间不断增长,而本身自己的空间使用低,如果一个DB上
有几个空间的话,就会造成结构混乱,分析不明...等等的问题.还会造成.你导出DMP文件,占用空间小,但是恢复出来的时候,发现硬盘的空间已经被吃光了.

解决方案:
首先我们在建立空间用户时,赋给其DBA权限,然后执行下面语句:
revoke unlimited tablespace from 空间名;
alter user 空间名 quote unlimited on 空间名;
再用TOAD CREATE 新的表的时候就不会建到USERS上,而是建到自己的空间名上.
这样再EXP出来,IMP另外一台DB表空间的时候,按照上面的操作,再IMP进去,也不会IMP至USERS上.
以上困惑良久.今朝解开. 其实导入至USERS里也有好处,就是EXP出来的DMP文件会很小,便于维护,携带以及恢复.
这是空间被莫名的吃了..不知所以..哈哈.

fxianxian 2008-05-12
  • 打赏
  • 举报
回复
应该是导出的时候有压缩的原因
同意4楼的说法
林g 2008-05-12
  • 打赏
  • 举报
回复
学习!
bobfang 2008-05-12
  • 打赏
  • 举报
回复
在exp时需要加参数compress=n。缺省情况下exp的compress=y,意思是在exp所生成的文件中将表所占用所有的extend合并为init extend。
CathySun118 2008-05-12
  • 打赏
  • 举报
回复
一般情况下,用export导出来的dmp文档中,包含表的storage信息,
  
    假如导出的是个很大的表,比如有1000万条记录,则此表的storage默认初始大小已达到上百兆,
  
    这样假如您使用rows=n选项,即使导出来的dmp文档大小只有不到一兆,
  
    导入时,系统会按storage默认初始大小来分配表空间,所以一下就占用了很多的空间,
  
    假如剩余表空间不够,并且没有配置成自动扩展(数据文档),会发生导入错误。
HelloWorld_001 2008-05-09
  • 打赏
  • 举报
回复
等帖子加到120分。

我记得是这样的,但不确定。等楼下
空间几个G,但是空间不会占满的。
形象点说就是100M占1G空间。
SYUEHOKO 2008-05-09
  • 打赏
  • 举报
回复
明天还没有答案..帖子加至100分.

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧