网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.在Oracle使用正规表达式编写更好.
.ORACLE9i新特性—索引跳跃式扫描.
.新手入门 Windows下Oracle安装图.
.Oracle SQL 基础.
.Oracle笔记-优化器计划稳定性.
.Oracle Portal网站开发.
.讲解Oracle数据库的sysdba权限登.
.Oracle 9i修改数据库的工作模式.
.新型数据库体系结构-DAN.
.使用SQL*PLUS构建完美excel或htm.
.ORACLE入门之物理文件大小的限制.
.分区大小调整完全手册.
.在T-SQL中实现Oracle的MINUS集合.
.利用Oracle的Job Queue实现定时操.
.实例解析:DB2中实现Oracle的相关.
.Move系统表DEPENDENCY$导致索引失.
.PL/SQL的异常处理机制的初步探讨.
.异构服务提高Oracle连接异种数据.
.让oracle自动启动方法!.
.Fravo Oracle 1Z0-132 v2.0.

oracle中获取表空间ddl语句

发表日期:2008-2-9



   -----------------------------------------------------------------------------------
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
上一篇:vb 调用 Oracle 函数返回数据集的例子 人气:1034
下一篇:如何在Delphi中调用oracle的存储过程返回数据集 人气:1423
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐