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数据以后会自动释放表空间吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)