当前位置:首页 » 编程语言 » sql释放表空间

sql释放表空间

发布时间: 2022-09-14 02:58:32

Ⅰ DROP TABLE在删除表时释放表空间吗

一、drop表

执行drop table xx 语句

drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。这样,回收站里的表信息就可以被恢复,或彻底清除。

通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句

flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_name>];

将回收站里的表恢复为原名称或指定新名称,表中数据不会丢失。

若要彻底删除表,则使用语句:drop table <table_name> purge;

清除回收站里的信息

清除指定表:purge table <table_name>;

清除当前用户的回收站:purge recyclebin;

清除所有用户的回收站:purge dba_recyclebin;

不放入回收站,直接删除则是:drop table xx purge;

举例如下:

===============================================================================

sql> select * from test1;

A B C

-- -- ----------

11 5

11 10

2 rows selected

SQL> create table test2 as select * from test1;

Table created

SQL> select * from test2;

A B C

-- -- ----------

11 5

11 10

2 rows selected

SQL> drop table test2;

Table dropped

SQL> select object_name, original_name, operation, type from user_recyclebin;

OBJECT_NAME ORIGINAL_NAME OPERATION TYPE

------------------------------ -------------------------------- --------- -------------------------

BIN$vQwemDg4R9mK9fYJNdYzvg==$0 TEST2 DROP TABLE

SQL> flashback table test2 to before drop rename to test3;--【to test3】将表重命名

Done

SQL> select * from test3;

A B C

-- -- ----------

11 5

11 10

2 rows selected

SQL> select * from test2

ORA-00942: 表或视图不存在

--彻底删除表

SQL> drop table test3 purge;

Table dropped

二、清除表中的数据

truncate操作 同没有where条件的delete操作十分相似,只是把表里的信息全部删除,但是表依然存在。

例如:truncate table XX

Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

truncate table 后,有可能表空间仍没有释放,可以使用如下语句:

alter table 表名称 deallocate UNUSED KEEP 0;

注意如果不加KEEP 0的话,表空间是不会释放的。

例如:

alter table F_MINUTE_TD_NET_FHO_B7 deallocate UNUSED KEEP 0;

或者:

TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能释放表空间。

例如: truncate table test1 DROP STORAGE;

三、查询分区表存在哪些分区:

查询分区表的情况,可以在USER_TAB_PARTITIONS中查询。例如:

select 'alter table '||t.table_name ||' truncate partition ' || t.partition_name from USER_TAB_PARTITIONS t where t.table_name like 'F_%'

清除指定某个分区表的分区数据:

alter table 表名称 truncate partition 分区名称;

四、清除分区表占用的空间:

alter table 表名称 DROP partition 分区名称;

例如:

alter table F_HOUR_TD_NET_MPVOICE DROP partition P_09121913 ;

五、查询表空间信息

可以利用如下语句查询各表在存储空间的使用分情况:

SELECT TABLESPACE_NAME,TO_CHAR(SUM(BYTES)/(1024*1024),'999G999D999') CNT_MB FROM DBA_EXTENTS WHERE OWNER='&OWNER' AND SEGMENT_NAME='&TABLE_NAME' AND SEGMENT_TYPE LIKE 'TABLE%' GROUP BY TABLESPACE_NAME;

可以使用如下语句,查询存储空间情况:

Select Tablespace_Name, Sum(bytes)/1024/1024 From Dba_Segments group By Tablespace_Name

六、查询用户下的表

如果你的用户权限不是DBA:

那你用

select * from user_tables;

可以查询到当前用户所拥有的表。

如果是DBA用户:

select * from dba_tables;

Ⅱ sql中 drop操作是否可以回滚truncate能否释放表空间

drop
无法回滚
truncate
截断表,删除表中所有数据,不写入回滚日志,所以无法rollback

Ⅲ MS SQL truncate能释放表空间吗

MS SQL truncate table只能删除表中的所有行或表中指定的分区,无法释放表空间。

如需释放,请执行DBCC SHRINKFILE命令收缩数据文件。

DBCC SHRINKFILE官方文档

使用方式及注意事项请参阅MSDN

Ⅳ 如何释放临时表空间中的空间

当database重新启动后,自动释放,你的问题可以通过增加临时表空间的大小解决
alter tablespace temp add tempfile 'd:\data\temp05.dbf' size 500m
如果您对我的回答有不满意的地方,还请您继续追问;
答题不易,互相理解,互相帮助!

数据库表空间不足,怎么解决

以MySQL 8.0 来说,通过查看 8.0 的官方文档得知,8.0 的临时表空间分为会话临时表空间和全局临时表空间,会话临时表空间存储用户创建的临时表和当 InnoDB 配置为磁盘内部临时表的存储引擎时由优化器创建的内部临时表,当会话断开连接时,其临时表空间将被截断并释放回池中;也就是说,在 8.0 中有一个专门的会话临时表空间,当会话被杀掉后,可以回收磁盘空间;而原来的 ibtmp1 是现在的全局临时表空间,存放的是对用户创建的临时表进行更改的回滚段,在 5.7 中 ibtmp1 存放的是用户创建的临时表和磁盘内部临时表;

也就是在 8.0 和 5.7 中 ibtmp1 的用途发生了变化,5.7 版本临时表的数据存放在 ibtmp1 中,在 8.0 版本中临时表的数据存放在会话临时表空间,如果临时表发生更改,更改的 undo 数据存放在 ibtmp1 中;

总结:在 mysql5.7 时,杀掉会话,临时表会释放,但是仅仅是在 ibtmp 文件里标记一下,空间是不会释放回操作系统的。如果要释放空间,需要重启数据库;在 mysql8.0 中可以通过杀掉会话来释放临时表空间。

Ⅵ 如何释放oracle临时表空间

重新创建一个临时表空间,把原来的默认临时表空间drop掉(包括里面的临时数据文件)再重新建立
SQL> create temporary tablespace temp2
2 tempfile '/home/oracle/oracle/proct/10.2.0/oradata/hatest/temp02.pdf' size 512M reuse
3 autoextend on next 640k maxsize unlimited;

Tablespace created.

SQL> alter database default temporary tablespace temp2;

Database altered.

SQL> drop tablespace temp including contents and datafiles;

Tablespace dropped.
(注意:由于临时表空间的数据文件比较大,所以这步可能会花费比较长的时间)
SQL> create temporary tablespace temp
2 tempfile '/home/oracle/oracle/proct/10.2.0/oradata/hatest/temp01.pdf' size 512M reuse
3 autoextend on next 640K maxsize unlimited;

Tablespace created.

SQL> alter database default temporary tablespace temp;

Database altered.

SQL> drop tablespace temp2 including contents and datafiles;

Tablespace dropped.

SQL> exit

Ⅶ 如何清理sql server 2000的临时表空间

f object_id('tempdb..#tempTable') is not null Begin
drop table #tempTable
End

Ⅷ Oracle 删除表中记录 如何释放表及表空间大小

解决方案

执行

altertablejk_testmove

altertablejk_testmovestorage(initial64k)


altertablejk_testdeallocateunused

altertablejk_testshrinkspace.

注意:因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),所以执行 move 就需要重建索引。


找到表对应的索引

selectindex_name,table_name,tablespace_name,index_type,statusfromdba_indexeswheretable_owner='SCOTT'

根据status 的值,重建无效的就行了。sql='alter index '||index_name||' rebuild'; 使用存储过程执行,稍微安慰。

还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!



另外说明:truncate table jk_test 会执行的更快,而且其所占的空间也会释放,应该是truncate 语句执行后是不会进入oracle回收站(recylebin)的缘故。如果drop 一个表加上purge 也不会进回收站(在此里面的数据可以通过flashback找回)。


不管是delete还是truncate 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:

alterdatabasedatafile'filename'resize8g

重定义数据文件的大小(不能小于该数据文件已用空间的大小)。


另补充一些PURGE知识

Purge操作:

1). Purge tablespace tablespace_name : 用于清空表空间的Recycle Bin

2). Purge tablespace tablespace_name user user_name: 清空指定表空间的Recycle Bin中指定用户的对象

3). Purge recyclebin: 删除当前用户的Recycle Bin中的对象。

4). Purge dba_recyclebin: 删除所有用户的Recycle Bin中的对象,该命令要sysdba权限

5). Drop table table_name purge:删除对象并且不放在Recycle Bin中,即永久的删除,不能用Flashback恢复。

6). Purge index recycle_bin_object_name: 当想释放Recycle bin的空间,又想能恢复表时,可以通过释放该对象的index所占用的空间来缓解空间压力。 因为索引是可以重建的。

二、如果某些表占用了数据文件的最后一些块,则需要先将该表导出或移动到其他的表空间中,然后删除表,再进行收缩。不过如果是移动到其他的表空间,需要重建其索引。

1、

SQL>altertablet_objmovetablespacet_tbs1;---移动表到其它表空间

也可以直接使用exp和imp来进行

2、

SQL>alterowner.index_namerebuild;--重建索引


3、删除原来的表空间

Ⅸ sql中 drop操作是否可以回滚truncate能否释放表空间

drop 无法回滚
truncate 截断表,删除表中所有数据,不写入回滚日志,所以无法rollback

Ⅹ 如何释放表空间占用的磁盘空间,表空间不能删除。已将表空间中的用户nc20121031 drop掉了。

删除表,并不会自动释放所占用的磁盘空间。收缩数据库后,才会释放磁盘空间。
方法一:
在SQL Server Management Studio的对象管理器(Object Explorer)里右击需要收缩的数据,在弹出的菜单中选择 任务(Tasks)-> 收缩 (Shrink)-> 数据库(Database),按照向导,点“确定”就会执行数据库收缩。

方法二:
执行如下脚本
DBCC SHRINKDATABASE <数据库名>

热点内容
怎么把服务器的ip固定了 发布:2025-01-12 03:55:42 浏览:578
php服务器开发 发布:2025-01-12 03:55:35 浏览:672
软件自制编程 发布:2025-01-12 03:54:00 浏览:534
j2ee和java的区别 发布:2025-01-12 03:42:44 浏览:581
android6小米 发布:2025-01-12 03:38:35 浏览:85
redis与数据库 发布:2025-01-12 03:20:21 浏览:211
怎么升级安卓100 发布:2025-01-12 03:19:37 浏览:516
c语言倒数 发布:2025-01-12 03:14:37 浏览:929
如何免费激活移动电话卡安卓 发布:2025-01-12 03:10:27 浏览:89
2020凯越精英配置什么样 发布:2025-01-12 03:08:02 浏览:685