执行对格式化输出的结果

xiooix2012 2011-10-21 05:00:32
接触oracle时间还不长,但是感觉好博大精深啊,随便一个问题我就能差出好多的资料来。现在想做一个自动收缩表空间的程序,把多余的空间返给操作系统。
在csdn的47522341专栏的博客(http://blog.csdn.net/47522341/article/details/3865946)上看到这个脚本
收缩空闲表空间
首先,如果没有分配的空间不足100M,则不考虑收缩。
收缩目标:当前数据文件大小 - (没分配空间- 100M)×0.8

select /*+ ordered use_hash(a,c) */
'alter database datafile '''||a.file_name||''' resize '
||round(a.filesize - (a.filesize - c.hwmsize-100) *0.8)||'M;',
a.filesize,
c.hwmsize
from
(
select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files
) a,
(
select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents
group by file_id) c
where a.file_id = c.file_id
and a.filesize - c.hwmsize > 100

这个能脚本能直接输出
alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\XNYB\SCOTTSJ' resize 104M;
但是并不执行。我想怎么修改一下脚本可以把输出的结果直接执行,不用自己再输入。
我用过spool这个执行两次可以,一次导出命令,一次调用输出的命令可以实现,但是还是想一次就能实现怎么做呢?
...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiooix2012 2011-10-22
  • 打赏
  • 举报
回复
我声明一下这个代码是执行不来的,自己费了好大劲终于研究透了,写到博客上了
xiooix2012 2011-10-21
  • 打赏
  • 举报
回复
我还没有学到游标,自己再看看 谢谢啦
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复
没有生成文件
实际我是用一个游标来保存你的查询语句的结果
通过 execute immediate 来执行你的命令语句
exception 是捕获执行过程中的异常
xiooix2012 2011-10-21
  • 打赏
  • 举报
回复
能简单介绍一下执行过程吗 ,执行过程生成文件了把,请文到哪里呢,exception中是什么意思,谢谢指导。。。
opps_zhou 2011-10-21
  • 打赏
  • 举报
回复


declare
cursor c_logfile is
select /*+ ordered use_hash(a,c) */
'alter database datafile '''||a.file_name||''' resize '
||round(a.filesize - (a.filesize - c.hwmsize-100) *0.8)||'M;' as sql_text,
a.filesize,
c.hwmsize
from
(
select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files
) a,
(
select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents
group by file_id) c
where a.file_id = c.file_id
and a.filesize - c.hwmsize > 100;
begin
for cmd in c_logfile
loop
execute immediate cmd.sql_text;
end loop;
exception
when others then
dbms_output.put_line(sqlerrm);
end;
/

xiooix2012 2011-10-21
  • 打赏
  • 举报
回复
自己顶顶

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧