oracle删除一些表数据,然后释放表空间的存储过程

oracle删除一些表数据,然后释放表空间的存储过程,第1张

create or replace procedure ttt is

begin

delete from bbb where。。。。。。 ;

commit;

execute immediate 'create table aaa as select from bbb';

commit;

--删除表bbb所有数据

execute immediate 'truncate table bbb';

commit;

--将临时表aaa的数据转移到bbb表中

insert into bbb select from aaa;

commit;

--删除临时表aaa

execute immediate 'drop table aaa';

commit;

end;

顺便说一句,你之前为什么要delete表bbb里的数据呢?还有,你存储过程里没end

---------补充------

||是用来区分普通字段和变量字段的

他那个写法不和我这个一样吗?

他那个只不过把我单引号里的sql设置成了一个变量,叫str

1、你导出的dmp中的某些表空间就很大,121M只是数据的大小,不含表空间;

2、删除表空间和用户后windows再删除实体文件,linux先offline数据文件,drop,重启数据库就好了

delete本来就不释放表空间的啊

truncate table 表名 --这样才释放表空间

如果你只是delete 部分数据 比如你把id=1的删除掉

但你还想释放表空间,需要借助一下临时表

分步给你执行一下

delete from 表名 where id=1;

commit;--以上为删除数据

create table tmp as select from 表名;--将目前表内的数据暂时放到tmp表中

truncate table 表名;--清空原表数据

insert into 表名 select from tmp;--将临时表数据反插回去

commit;

drop table tmp;--将临时表删除

你要导入的dmp文件是从别的电脑拷贝过来的,然后要导入到自己的电脑中去,是吗?这样的话,别的电脑oracle是什么版本的?还有你的是什么版本的?版本相同倒是不用在乎,如果不同,语句上会有所差异的。

当表中的数据不需要时 则应该删除该数据并释放所占用的空间 删除表中的数据可以使用Delete语句或者Truncate语句 下面分别介绍 一 delete语句 ( )有条件删除 语法格式 delete [from] table_name [where condition]; 如 删除users表中的userid为 的数据 delete from users where userid= ; ( )无条件删除整个表数据 语法格式 delete table_name; 如 删除user表中的所有数据 delete users ; 二 Truncate语句 使用Truncate语句是删除表中的所有记录 语法格式 Truncate [table] table_name; ( )删除所有记录不保留记录占用空间 Truncate [table] table_name [drop storage]; 如 删除users表中的所有数据并不保存占用空间 Truncate table users drop storage; 由于默认使用drop storage关键字 所以可以省略 drop storage; ( )删除所有记录保留记录占用空间 Truncate [table] table_name [reuse storage]; 如 删除users表中的所有数据并保存占用空间 Truncate table users reuse storage; 三 两种删除语句的对比 由于delete语句删除记录时候 记录是逐条删除的 而Truncate 语句删除数据时不产生回退信息 所以如果需要删除大量数据的时候使用delete则占用较多的系统资源 而如果使用Truncate 则会快的多 下面通过实例说明一下 首先建立user表 create table users ( userid varchar ( ) username varchar ( ) userpass varchar ( ) );复制代码 接着插入一条数据 insert into users values( GavinDream ); 使用复制插入方法插入几万条数据 insert into users(userid username userpass) select from users;我插入了 条数据 使用delete删除花费时间为 seconds 然后又插入了二倍的数据 但使用truncate花费时间仅仅为 seconds 如下图所示 lishixinzhi/Article/program/Oracle/201405/30860

oracle 数据库 inactive 连接会话是不会自动释放的。

原因是有连接数据库,但是没有会话的 *** 作,一般情况下不需要处理。

需要注意的是,如果会话太多,会到数据库会话限制,这个时候需要杀数据库会话和 *** 作系统进程。

使用delete删除数据后,表空间不会回收,存在高水位

High Water Mark,HWM) 是Oracle(Segment)级别的概念。在仅有DML(比如delete,insert) *** 作时,高水位线只会增长,不会降低。具体来说,由于程序使用的delete语句不回收使用过的空间,数据虽然删除了,但是高水位线却没有降低,仍然处于之前的水位。

解决办法:降低表的高水位

语法:alter table my_objects shrink space;

ps:使用truncate删除数据,不会有HWM的现象

以上就是关于oracle删除一些表数据,然后释放表空间的存储过程全部的内容,包括:oracle删除一些表数据,然后释放表空间的存储过程、Oracle 数据库问题: 1、DMP导入表空间后增长100倍左右; 2、Oracle自动释放硬盘空间、oracle 10g版本 delete数据以后会自动释放表空间吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9796622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存