转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
oracle中获取表空间ddl语句         ★★★★

oracle中获取表空间ddl语句

作者:闵涛 文章来源:闵涛的学习笔记 点击数:757 更新时间:2009/4/22 22:04:06
-----------------------------------------------------------------------------------
create table
-----------------------------------------------------------------------------------
create table bak_dba_tablesapce
(ddl_txt varchar2(2000));

-----------------------------------------------------------------------------------
procedure
-----------------------------------------------------------------------------------

create or replace procedure get_tabspace_ddl as
type r_curdf is ref cursor;

v_tpname varchar2(30);

cursor v_curtp is select * from dba_tablespaces;
v_curdf r_curdf;

v_ddl varchar2(2000);
v_txt varchar2(2000);
v_tp dba_tablespaces%rowtype;
v_df dba_data_files%rowtype;
v_count number;
begin

OPEN V_CURTP;

LOOP
FETCH v_curtp INTO v_tp;
EXIT WHEN v_CURtp%NOTFOUND;

V_TPNAME:=v_TP.tablespace_name;

IF v_tp.CONTENTS=''''TEMPORARY'''' THEN ---临时表空间
--DBMS_OUTPUT.PUT_LINE(''''CREATE TEMPORARY TABLESPACE ''''||v_tp.tablespace_name||'''' DATAFILE '''');
v_txt:=''''CREATE TEMPORARY TABLESPACE ''''||v_tp.tablespace_name||'''' DATAFILE '''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

SELECT COUNT(*) INTO v_count ---获得游标v_curtp指向的当前表空间包含的临时数据文件数
FROM DBA_TEMP_FILES
WHERE tablespace_name=v_tp.tablespace_name;

ELSIF v_tp.CONTENTS=''''UNDO'''' THEN ---回退表空间
-- DBMS_OUTPUT.PUT_LINE(''''CREATE UNDO TABLESPACE ''''||v_tp.tablespace_name||'''' DATAFILE '''');
v_txt:=''''CREATE UNDO TABLESPACE ''''||v_tp.tablespace_name||'''' DATAFILE '''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

SELECT COUNT(*) INTO v_count ---获得游标v_curtp指向的当前表空间包含的数据文件数
FROM DBA_DATA_FILES
WHERE tablespace_name=v_tp.tablespace_name;

ELSIF v_tp.CONTENTS=''''PERMANENT'''' THEN ---普通表空间
v_txt:=''''CREATE TABLESPACE ''''||v_tp.tablespace_name||'''' DATAFILE '''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

END IF;

if v_tp.CONTENTS=''''TEMPORARY'''' THEN ----临时数据文件
OPEN V_CURDF for select * from dba_temp_files where tablespace_name=v_tpname;
else
OPEN V_CURDF for select * from dba_data_files where tablespace_name=v_tpname;
end if;

LOOP
FETCH v_curdf INTO v_df; ---获取DATAFILE定义
EXIT WHEN v_CURdf%NOTFOUND;

IF V_DF.AUTOEXTENSIBLE=''''YES'''' THEN
V_DDL:=''''ON'''';
ELSE
V_DDL:=''''OFF'''';
END IF;

IF v_curdf%rowcount=v_count THEN
v_txt:=''''''''''''''''||v_df.file_name||''''''''''''''''||'''' SIZE ''''||(V_DF.BLOCKS*8/1024)||''''M AUTOEXTEND ''''||V_DDL;
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

ELSE
v_txt:=''''''''''''''''||v_df.file_name||''''''''''''''''||'''' SIZE ''''||(V_DF.BLOCKS*8/1024)||''''M AUTOEXTEND ''''||V_DDL||'''','''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

END IF;

END LOOP;
CLOSE V_CURDF;

IF v_tp.CONTENTS=''''UNDO'''' THEN ---回退表空间存储参数
insert into bak_dba_tablesapce(ddl_txt) values(V_TP.STATUS);

ELSE ---普通表空间、临时表空间存储参数
IF v_tp.CONTENTS=''''PERMANENT'''' THEN ---普通表空间存储参数
insert into bak_dba_tablesapce(ddl_txt) values(V_TP.LOGGING);
insert into bak_dba_tablesapce(ddl_txt) values(V_TP.STATUS);
insert into bak_dba_tablesapce(ddl_txt) values(''''PERMANENT'''');
END IF;

IF v_tp.ALLOCATION_TYPE=''''UNIFORM'''' THEN ----统一分区尺寸
v_txt:=''''EXTENT MANAGEMENT ''''||V_TP.EXTENT_MANAGEMENT||'''' UNIFORM SIZE ''''||v_tp.INITIAL_EXTENT/(1024*1024)||''''M'''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);

ELSIF v_tp.ALLOCATION_TYPE=''''SYSTEM'''' THEN ----系统自动管理分区尺寸
v_txt:=''''EXTENT MANAGEMENT ''''||V_TP.EXTENT_MANAGEMENT||'''' AUTOALLOCATE '''' ;
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);
END IF;

IF v_tp.SEGMENT_SPACE_MANAGEMENT=''''AUTO'''' THEN ----系统自动管理段空间
insert into bak_dba_tablesapce(ddl_txt) values(''''SEGMENT SPACE MANAGEMENT AUTO'''');
END IF;

END IF;
v_txt:=''''BLOCKSIZE ''''||(V_TP.BLOCK_SIZE/1024)||''''K '''';
insert into bak_dba_tablesapce(ddl_txt) values(v_txt);
insert into bak_dba_tablesapce(ddl_txt) values(''''/'''');
insert into bak_dba_tablesapce(ddl_txt) values('''''''');
commit;
END LOOP;
CLOSE V_CURTP;

EXCEPTION
WHEN OTHERS THEN
if v_curtp%isopen then
close v_curtp;
if v_curdf%isopen then
close v_curdf;
end if;
end if;
RAISE;
END get_tabspace_ddl;
---------------------------------------------------------------------
get_tabspace_dll.sh
用于crontab 定时备份数据库表空间的ddl
---------------------------------------------------------------------
#!/bin/ksh
#生成 bill数据库的表空间ddl语句
#每天执行
#获取环境变量
. /oracle/.profile
username=sys
password=aaa123

########
sqlplus username/password<<EOF
---declare var here
begin
get_tabspace_ddl;
end;
/
exit
/
EOF
if [ $? -ne 0 ];then
echo "ERROR! execute procedure failed! please check it"
#mail ...
exit 1
fi
sqlplus username/password <<!
set pages 0;
set serveroutput on size 1000000;
set heading off;
set feedback off;
set echo off;

spool /ora_backup/orasysbak/bill_tabspace_ddl.sql
select ddl_txt from bak_dba_tablesapce;
spool off;
exit
!
if [ $? -ne 0 ];then
echo "ERROR! generate tabspace ddl failed! please check it"
#mail ...
exit 1
fi


[ORACLE]ORACLE获取DDL的几种常用的方法  [ORACLE]用JSP导出ORACLE的数据表DDL
[Sql Server]用DBMS_DDL包重编译PL/SQL对象  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台