十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
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
解决方案
执行
alter table jk_test move
或
alter table jk_test move storage(initial 64k)
或
alter table jk_test deallocate unused
或
alter table jk_test shrink space.
注意:因为alter table jk_test move 是通过消除行迁移,清除空间碎片,删除空闲空间,实现缩小所占的空间,但会导致此表上的索引无效(因为ROWID变了,无法找到),所以执行 move 就需要重建索引。
找到表对应的索引
select index_name,table_name,tablespace_name,index_type,status from dba_indexes where table_owner='SCOTT'
根据status 的值,重建无效的就行了。sql='alter index '||index_name||' rebuild'; 使用存储过程执行,稍微安慰。
还要注意alter table move过程中会产生锁,应该避免在业务高峰期操作!
另外说明:truncate table jk_test 会执行的更快,而且其所占的空间也会释放,应该是truncate 语句执行后是不会进入oracle回收站(recylebin)的缘故。如果drop 一个表加上purge 也不会进回收站(在此里面的数据可以通过flashback找回)。
不管是delete还是truncate 相应数据文件的大小并不会改变,如果想改变数据文件所占空间大小可执行如下语句:
alter database datafile 'filename' resize 8g
重定义数据文件的大小(不能小于该数据文件已用空间的大小)。
另补充一些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 alter table t_obj move tablespace t_tbs1; ---移动表到其它表空间
也可以直接使用exp和imp来进行
2、
SQLalter owner.index_name rebuild; --重建索引
3、删除原来的表空间
select
'drop
table
'
||
table_name
||
'
cascade
constraints'
v_name
from
dba_tables
where
tablespace_name
=
'users';
按照表空间名查询所有包含的表,并根据表名拼接删除语句。
执行上面查询语句生成的语句,即可删除所有表。
重新创建一个临时表空间,把原来的默认临时表空间drop掉(包括里面的临时数据文件)再重新建立
SQL create temporary tablespace temp2
2 tempfile '/home/oracle/oracle/product/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/product/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