查询oracle 某一用户占用了哪个表空间,并为表空间瘦身
问题1:如何查出用户aa占用了哪个表空间(替换aa的地方请标出来,非常感谢)?问题2.:如何查出表空间cc.db被哪几个用户占用了?问题3:是不是dbf文件增长到32g就...
问题1:如何查出用户aa占用了哪个表空间(替换aa的地方请标出来,非常感谢)?
问题2.:如何查出表空间cc.db被哪几个用户占用了?
问题3:是不是dbf文件增长到32g就不能再增加了呢?
问题4:如果我删除了aa用户如何为他占用的表空间释放硬盘空间 展开
问题2.:如何查出表空间cc.db被哪几个用户占用了?
问题3:是不是dbf文件增长到32g就不能再增加了呢?
问题4:如果我删除了aa用户如何为他占用的表空间释放硬盘空间 展开
2个回答
展开全部
楼上1,2的应该是错误的,3是不完整
11g之后 用户是区分大小写的 语句
select default_tablespace from dba_users where username='aa';
select default_tablespace ,listagg(username,',') within group (order by username) from dba_users where default_tablespace in ('CC') group by default_tablespace;
normal 8k 32G
bigfile 8K 32T
你所谓的,删除和输入的数据指对表的删除和插入,数据文件如果是自动增长的,那就是13g,要减少可以但是程度不会很大,10g的数据扩到13g,再想回到10g,很难
11g之后 用户是区分大小写的 语句
select default_tablespace from dba_users where username='aa';
select default_tablespace ,listagg(username,',') within group (order by username) from dba_users where default_tablespace in ('CC') group by default_tablespace;
normal 8k 32G
bigfile 8K 32T
你所谓的,删除和输入的数据指对表的删除和插入,数据文件如果是自动增长的,那就是13g,要减少可以但是程度不会很大,10g的数据扩到13g,再想回到10g,很难
追问
我测试了一下
SELECT DISTINCT OWNER FROM DBA_TABLES WHERE TABLESPACE_NAME='CC';(这个是根据表空间查用户的,我查了几个表空间都包含aa用户)
我用您的这个语句select default_tablespace from dba_users where username='aa'; 就查出了一个表空间 为啥呢?
追答
那是用户默认的表空间,如果没有指定表空间名,就会放到此表空间下
建表的时候 表空间指定的话,只要用户在别的表空间下有配额和权限,就能建,就是你说的有几个表空间的情况
比方
如果create table a(id int) tablespace CC 就能建到表空间CC下
如果create table a(id int) 就建到默认表空间下
你要查看所有的表空间的话普通表 只是其中一个对象而已,还有分区表,索引等都可以指定相应的表空间
第一、一般你不是像类似迁移数据等要特别关注所有用户对象表空间的使用和权限的,重点关注特别大的表和索引
第二、根据平时空间的使用情况,增长速度,清理策略,做个规划
第三、 move到单独表空间下一定程度能提高性能,维护性比较好,但往往针对某些特殊情况下的个别表
第四、好的空间规划对备份和恢复也有好处
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
壹寰(深圳)科技文化有限公司
2021-03-27 广告
2021-03-27 广告
不同公司提供的方案也不一样。以上回答如果还觉得不够详细,可以来咨询下壹寰(深圳)科技文化有限公司。91数据恢复是壹寰(深圳)科技文化有限公司旗下专业数据恢复品牌,91数据恢复专注于勒索病毒数据恢复、勒索病毒数据修复、数据库修复、数据库解密恢...
点击进入详情页
本回答由壹寰(深圳)科技文化有限公司提供
展开全部
1、SELECT TABLESPACE_NAME FROM USER_TABLES WHERE TABLE_NAME='AA'
--aa要大写。
2、SELECT DISTINCT OWNER FROM DBA_TABLES WHERE TABLESPACE_NAME='CC';
3、跟操作系统和数据块尺寸有关系。8K一般是32G。16K 32K更大些
4、DROP USER AA CASCADE;
备注:只会释放表空间,不会释放硬盘空间的。释放硬盘空间需要删除表空间。
--aa要大写。
2、SELECT DISTINCT OWNER FROM DBA_TABLES WHERE TABLESPACE_NAME='CC';
3、跟操作系统和数据块尺寸有关系。8K一般是32G。16K 32K更大些
4、DROP USER AA CASCADE;
备注:只会释放表空间,不会释放硬盘空间的。释放硬盘空间需要删除表空间。
追问
您说的根据表空间查用户的方法成功了,但是根据用户查表空间方法显示没有记录。
还是第4个问题 比如表空间大小为10g,我删除了一个用户的4g大小的数据,然后又添加了一个不同用户,输入了3g大小的数据,那么现在表空间大小是10g还是13g呢?(如果是相同用户,表空间会增加吗?)
追答
1、根据用户查表空间:
SELECT TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER='AA'
2、你如果drop table xx purge释放表空间之后,再输入3g的数据,表空间不会增长。因为会先使用这4g的空间。如果你只做了delete 或者其他没有释放表空间的方式。你在插入3g的数据,因为你的表空间是自增长的,所以会自动增长。
影响这些的很多。比如表的出时段划分。
你可以从select sum(bytes)/1024/1024 from dba_data_files where tablespace_name='TBS_NAME' GROUP BY TABLSPACE_NAME;
查看你的表空间大小。
也可以从dba_free_tablespace查看剩余大小。
注:以上可能有部分笔误,请自行修改。谢谢。
网上有很多脚本,查看表空间及剩余大小的。可以做个测试,很简单。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询