卖老头的火柴
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
网站链接...
资源
===========================================================
ORA-01552 cannot use system rollback segment for non-system tablespace
===========================================================

今天在测试功能的时候,出现ORA-01552错误,如下:

scott@CNHTM> update emp set sal=sal+1 where empno=7369;
update emp set sal=sal+1 where empno=7369
*
ERROR at line 1:
ORA-01552: cannot use system rollback segment for non-system tablespace 'TBS_1'

解决过程如下:

确定undo表空间的相关参数

scott@CNHTM> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string MANUAL
undo_retention integer 900
undo_tablespace string

查询undo表空间的名称

scott@CNHTM> select name from v$tablespace;

NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
TEMPTS1
TBS_1
USERS
INDX

7 rows selected.

修改数据库参数
1、设置默认undo表空间
2、undo表空间为自动管理

scott@CNHTM> alter system set undo_tablespace=UNDOTBS1 scope=spfile;

System altered.

scott@CNHTM>
scott@CNHTM> alter system set undo_management=auto scope=spfile;

System altered.

重启数据库,测试原来出错的语句

scott@CNHTM> shutdown immediate
ORA-01031: insufficient privileges
scott@CNHTM> conn / as sysdba
Connected.
sys@CNHTM> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@CNHTM> startup
ORACLE instance started.

Total System Global Area 184549376 bytes
Fixed Size 1218388 bytes
Variable Size 134219948 bytes
Database Buffers 41943040 bytes
Redo Buffers 7168000 bytes
Database mounted.
Database opened.
sys@CNHTM>
sys@CNHTM> conn scott/tiger
Connected.
scott@CNHTM> update emp set sal=sal+1 where empno=7369;

1 row updated.

--end--


cnhtm 发表于:2010.11.19 14:43 ::分类: ( 一般分类 ) ::阅读:(577次) :: 评论 (0) :: 引用 (0)
===========================================================
lsof for aix下载地址
===========================================================

下载地址:

http://ftp.unicamp.br/pub/unix-tools/lsof/binaries/aix/

用来查看aix操作系统打开多少文件的工具,对于java.net.SocketException: Too many open files

这样的问题,可以用这个工具来查看现在系统打开文件数量,使用方法

解压.bz2后改名为lsof(不改也可以,就是命令长,麻烦)

修改为可执行 chmod u+x lsof

运行 ./lsof

查看打开文件数量,就加 |wc

./lsof |wc

--end--


cnhtm 发表于:2010.10.21 10:38 ::分类: ( 一般分类 ) ::阅读:(729次) :: 评论 (0) :: 引用 (0)
===========================================================
在oracle的plsql中为cursor使用绑定变量
===========================================================

oracle存储过程中,经常使用cursor,在cursor中使用绑定变量的时候,要使用refcursor,下面是例子:

scott@CNHTM> set serveroutput on;
scott@CNHTM> declare
2 cur_test sys_refcursor;
3 v_job emp.job%type;
4 v_ename emp.ename%type;
5 begin
6 OPEN cur_test FOR 'SELECT job,ename FROM emp where job=:1'
7 using 'SALESMAN';
8 loop
9 fetch cur_test
10 into v_job, v_ename;
11 exit when cur_test%notfound;
12 dbms_output.put_line('job:'||v_job||', ename:'||v_ename);
13 end loop;
14 close cur_test;
15 end;
16 /
job:SALESMAN, ename:ALLEN
job:SALESMAN, ename:WARD
job:SALESMAN, ename:MARTIN
job:SALESMAN, ename:TURNER

PL/SQL procedure successfully completed.

scott@CNHTM>

--end--


cnhtm 发表于:2010.09.09 08:37 ::分类: ( 一般分类 ) ::阅读:(631次) :: 评论 (0) :: 引用 (0)
===========================================================
检查oracle补丁是否可以滚动更新的方法
===========================================================

在oracl rac环境中,经常需要滚动打补丁(rolling patch),对于一个补丁是否是rolling patch,可以用如下两种方式进行检查。

1、使用opatch query命令

ora_test@oracle[/oracle/patch]> ls
7662491 p7662491_10204_AIX5L.zip
ora_test@oracle[/oracle/patch]> cd 766*91
ora_test@oracle[/oracle/patch/7662491]> opatch query . |grep rolling
Patch is a rolling patch: true

2、直接查看补丁包中的inventory文件

inventory文件具体位置:

<patchid>/etc/config/inventory
打开inventory文件,查找 <online_rac_installable>,如果为true,则支持rolling patch,如下红色行
<oneoff_inventory>
<opack_version version="10.1.0.6.0"/>
<reference_id number="7662491"/>
<unique_patch_id>11173623</unique_patch_id>
<date_of_patch year="2009" month="Apr" day="9" time="12:41:52 hrs" zone="PST8PDT"/>
<base_bugs>
<bug number="7662491" description="INSTANCE CRASH / ORA-600 [KDDUMMY_BLKCHK] HIT DURING RECOVERY"/>
</base_bugs>
<required_components>
<component internal_name="oracle.rdbms" version="10.2.0.4.0" opt_req="O"/>
</required_components>
<os_platforms>
<platform name="AIX-Based Systems (64-bit) 5L" id="212"/>
</os_platforms>
<executables>
<executable path="%ORACLE_HOME%/bin/oracle"/>
</executables>
<instance_shutdown>true</instance_shutdown>
<online_rac_installable>true</online_rac_installable>
</oneoff_inventory>

--end--


cnhtm 发表于:2010.07.22 10:34 ::分类: ( 一般分类 ) ::阅读:(447次) :: 评论 (0) :: 引用 (0)
===========================================================
aix6安装oracle 10g rac问题
===========================================================

在aix6(或aix6.1)上安装oracle10g rac过程中会出现很多问题,下面是各个问题的解决办法:

一、安装之前,运行如下命令修改oracle用户的属性

这一步骤不止aix6,aix5上也要执行,不知为何在官方文档上没有看到

chuser capabilities=CAP_PROPAGATE,CAP_BYPASS_RAC_VMM,CAP_NUMA_ATTACH oracle

二、安装crs的最后一步运行root.sh脚本之前需要修改$CRS_HOME/bin/racgvip脚本,否则会导致vip无法启动,修改方法如下:

# cd $CRS_HOME/bin
# cp racgvip racgvip.old
# vi racgvip

将221,231,371这三行中的 $5 修改为 $6

原因是AIX6.1与AIX5.3的netstat -in 执行结果不一样

三、升级crs到10.2.0.4,运行root02.sh之后,vip又变得无法启动,这时需要再次修改$CRS_HOME/bin/racgvip,方法如下:

注意是在运行root02.sh之后再修改

# cd $CRS_HOME/bin
# cp racgvip racgvip.10204.old
# vi racgvip

将263,275这两行中的 $5 修改为 $6

原因同样是AIX6.1与AIX5.3的netstat -in 执行结果不一样

然后重新启动crs

# $CRS_HOME/bin/crsctl stop crs
# $CRS_HOME/bin/crsctl start crs

四、升级rdbms到10.2.0.4过程中,会弹出一个窗口报告java进程在运行,不允许升级,这又是一个bug,修改方法如下:

# mv /usr/sbin/fuser /usr/sbin/fuser.old
# touch /usr/sbin/fuser

然后在弹出的窗口中点“Retry”按钮,就可以完成rdbms的升级

--end--


cnhtm 发表于:2010.07.08 09:10 ::分类: ( 一般分类 ) ::阅读:(1173次) :: 评论 (0) :: 引用 (0)
===========================================================
windows7中双击视频文件不能用终极解码播放问题的解决
===========================================================

windows7系统中安装终极解码,uac处于开启状态的时候:

  • 双击视频文件不能打开终极解码;
  • 运行我的播放器也没有反应;
  • 用管理员身份能打开我的播放器,但向播放器拖拽文件也不能播放。

后来找到原因,是最近安装了一个win7的更新 KB976264,把这个更新卸载掉之后,终极解码运行正常,以上异常现象全部消失。


cnhtm 发表于:2010.06.03 13:10 ::分类: ( 一般分类 ) ::阅读:(677次) :: 评论 (0) :: 引用 (0)
===========================================================
ftp.pkb
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE BODY ftp AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/ftp.pkb
-- Author : DR Timothy S Hall
-- Description : Basic FTP API. For usage notes see:
-- http://www.oracle-base.com/articles/misc/FTPFromPLSQL.php
-- Requirements : http://www.oracle-base.com/dba/miscellaneous/ftp.pks
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 14-AUG-2003 Tim Hall Initial Creation
-- 10-MAR-2004 Tim Hall Add convert_crlf procedure.
-- Incorporate CRLF conversion functionality into
-- put_local_ascii_data and put_remote_ascii_data
-- functions.
-- Make get_passive function visible.
-- Added get_direct and put_direct procedures.
-- 23-DEC-2004 Tim Hall The get_reply procedure was altered to deal with
-- banners starting with 4 white spaces. This fix is
-- a small variation on the resolution provided by
-- Gary Mason who spotted the bug.
-- 10-NOV-2005 Tim Hall Addition of get_reply after doing a transfer to
-- pickup the 226 Transfer complete message. This
-- allows gets and puts with a single connection.
-- Issue spotted by Trevor Woolnough.
-- 03-OCT-2006 Tim Hall Add list, rename, delete, mkdir, rmdir procedures.
-- 12-JAN-2007 Tim Hall A final call to get_reply was added to the get_remote%
-- procedures to allow multiple transfers per connection.
-- 15-Jan-2008 Tim Hall login: Include timeout parameter (suggested by Dmitry Bogomolov).
-- 21-Jan-2008 Tim Hall put_%: "l_pos < l_clob_len" to "l_pos <= l_clob_len" to prevent
-- potential loss of one character for single-byte files or files
-- sized 1 byte bigger than a number divisible by the buffer size
-- (spotted by Michael Surikov).
-- 23-Jan-2008 Tim Hall send_command: Possible solution for ORA-29260 errors included,
-- but commented out (suggested by Kevin Phillips).
-- 12-Feb-2008 Tim Hall put_local_binary_data and put_direct: Open file with "wb" for
-- binary writes (spotted by Dwayne Hoban).
-- 03-Mar-2008 Tim Hall list: get_reply call and close of passive connection added
-- (suggested by Julian, Bavaria).
-- 12-Jun-2008 Tim Hall A final call to get_reply was added to the put_remote%
-- procedures, but commented out. If uncommented, it may cause the
-- operation to hang, but it has been reported (morgul) to allow
-- multiple transfers per connection.
-- get_reply: Moved to pakage specification.
-- 24-Jun-2008 Tim Hall get_remote% and put_remote%: Exception handler added to close the passive
-- connection and reraise the error (suggested by Mark Reichman).
-- 22-Apr-2009 Tim Hall get_remote_ascii_data: Remove unnecessary logout (suggested by John Duncan).
-- get_reply and list: Handle 400 messages as well as 500 messages (suggested by John Duncan).
-- logout: Added a call to UTL_TCP.close_connection, so not necessary to close
-- any connections manually (suggested by Victor Munoz).
-- get_local_*_data: Check for zero length files to prevent exception (suggested by Daniel)
-- nlst: Added to return list of file names only (suggested by Julian and John Duncan)
-- --------------------------------------------------------------------------

g_reply t_string_table := t_string_table();
g_binary BOOLEAN := TRUE;
g_debug BOOLEAN := TRUE;
g_convert_crlf BOOLEAN := TRUE;

PROCEDURE debug (p_text IN VARCHAR2);

-- --------------------------------------------------------------------------
FUNCTION login (p_host IN VARCHAR2,
p_port IN VARCHAR2,
p_user IN VARCHAR2,
p_pass IN VARCHAR2,
p_timeout IN NUMBER := NULL)
RETURN UTL_TCP.connection IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
BEGIN
g_reply.delete;

l_conn := UTL_TCP.open_connection(p_host, p_port, tx_timeout => p_timeout);
get_reply (l_conn);
send_command(l_conn, 'USER ' || p_user);
send_command(l_conn, 'PASS ' || p_pass);
RETURN l_conn;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
FUNCTION get_passive (p_conn IN OUT NOCOPY UTL_TCP.connection)
RETURN UTL_TCP.connection IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_reply VARCHAR2(32767);
l_host VARCHAR(100);
l_port1 NUMBER(10);
l_port2 NUMBER(10);
BEGIN
send_command(p_conn, 'PASV');
l_reply := g_reply(g_reply.last);

l_reply := REPLACE(SUBSTR(l_reply, INSTR(l_reply, '(') + 1, (INSTR(l_reply, ')')) - (INSTR(l_reply, '('))-1), ',', '.');
l_host := SUBSTR(l_reply, 1, INSTR(l_reply, '.', 1, 4)-1);

l_port1 := TO_NUMBER(SUBSTR(l_reply, INSTR(l_reply, '.', 1, 4)+1, (INSTR(l_reply, '.', 1, 5)-1) - (INSTR(l_reply, '.', 1, 4))));
l_port2 := TO_NUMBER(SUBSTR(l_reply, INSTR(l_reply, '.', 1, 5)+1));

l_conn := utl_tcp.open_connection(l_host, 256 * l_port1 + l_port2);
return l_conn;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE logout(p_conn IN OUT NOCOPY UTL_TCP.connection,
p_reply IN BOOLEAN := TRUE) AS
-- --------------------------------------------------------------------------
BEGIN
send_command(p_conn, 'QUIT', p_reply);
UTL_TCP.close_connection(p_conn);
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE send_command (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_command IN VARCHAR2,
p_reply IN BOOLEAN := TRUE) IS
-- --------------------------------------------------------------------------
l_result PLS_INTEGER;
BEGIN
l_result := UTL_TCP.write_line(p_conn, p_command);
-- If you get ORA-29260 after the PASV call, replace the above line with the following line.
-- l_result := UTL_TCP.write_text(p_conn, p_command || utl_tcp.crlf, length(p_command || utl_tcp.crlf));

IF p_reply THEN
get_reply(p_conn);
END IF;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE get_reply (p_conn IN OUT NOCOPY UTL_TCP.connection) IS
-- --------------------------------------------------------------------------
l_reply_code VARCHAR2(3) := NULL;
BEGIN
LOOP
g_reply.extend;
g_reply(g_reply.last) := UTL_TCP.get_line(p_conn, TRUE);
debug(g_reply(g_reply.last));
IF l_reply_code IS NULL THEN
l_reply_code := SUBSTR(g_reply(g_reply.last), 1, 3);
END IF;
IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN
RAISE_APPLICATION_ERROR(-20000, g_reply(g_reply.last));
ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND
SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN
EXIT;
END IF;
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
FUNCTION get_local_ascii_data (p_dir IN VARCHAR2,
p_file IN VARCHAR2)
RETURN CLOB IS
-- --------------------------------------------------------------------------
l_bfile BFILE;
l_data CLOB;
BEGIN
DBMS_LOB.createtemporary (lob_loc => l_data,
cache => TRUE,
dur => DBMS_LOB.call);

l_bfile := BFILENAME(p_dir, p_file);
DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly);

IF DBMS_LOB.getlength(l_bfile) > 0 THEN
DBMS_LOB.loadfromfile(l_data, l_bfile, DBMS_LOB.getlength(l_bfile));
END IF;

DBMS_LOB.fileclose(l_bfile);

RETURN l_data;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
FUNCTION get_local_binary_data (p_dir IN VARCHAR2,
p_file IN VARCHAR2)
RETURN BLOB IS
-- --------------------------------------------------------------------------
l_bfile BFILE;
l_data BLOB;
BEGIN
DBMS_LOB.createtemporary (lob_loc => l_data,
cache => TRUE,
dur => DBMS_LOB.call);

l_bfile := BFILENAME(p_dir, p_file);
DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly);
IF DBMS_LOB.getlength(l_bfile) > 0 THEN
DBMS_LOB.loadfromfile(l_data, l_bfile, DBMS_LOB.getlength(l_bfile));
END IF;
DBMS_LOB.fileclose(l_bfile);

RETURN l_data;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
FUNCTION get_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_file IN VARCHAR2)
RETURN CLOB IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_amount PLS_INTEGER;
l_buffer VARCHAR2(32767);
l_data CLOB;
BEGIN
DBMS_LOB.createtemporary (lob_loc => l_data,
cache => TRUE,
dur => DBMS_LOB.call);

l_conn := get_passive(p_conn);
send_command(p_conn, 'RETR ' || p_file, TRUE);
--logout(l_conn, FALSE);

BEGIN
LOOP
l_amount := UTL_TCP.read_text (l_conn, l_buffer, 32767);
DBMS_LOB.writeappend(l_data, l_amount, l_buffer);
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
WHEN OTHERS THEN
NULL;
END;
UTL_TCP.close_connection(l_conn);
get_reply(p_conn);

RETURN l_data;

EXCEPTION
WHEN OTHERS THEN
UTL_TCP.close_connection(l_conn);
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
FUNCTION get_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_file IN VARCHAR2)
RETURN BLOB IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_amount PLS_INTEGER;
l_buffer RAW(32767);
l_data BLOB;
BEGIN
DBMS_LOB.createtemporary (lob_loc => l_data,
cache => TRUE,
dur => DBMS_LOB.call);

l_conn := get_passive(p_conn);
send_command(p_conn, 'RETR ' || p_file, TRUE);

BEGIN
LOOP
l_amount := UTL_TCP.read_raw (l_conn, l_buffer, 32767);
DBMS_LOB.writeappend(l_data, l_amount, l_buffer);
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
WHEN OTHERS THEN
NULL;
END;
UTL_TCP.close_connection(l_conn);
get_reply(p_conn);

RETURN l_data;

EXCEPTION
WHEN OTHERS THEN
UTL_TCP.close_connection(l_conn);
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put_local_ascii_data (p_data IN CLOB,
p_dir IN VARCHAR2,
p_file IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_out_file UTL_FILE.file_type;
l_buffer VARCHAR2(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_clob_len INTEGER;
BEGIN
l_clob_len := DBMS_LOB.getlength(p_data);

l_out_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767);

WHILE l_pos <= l_clob_len LOOP
DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer);
IF g_convert_crlf THEN
l_buffer := REPLACE(l_buffer, CHR(13), NULL);
END IF;

UTL_FILE.put(l_out_file, l_buffer);
UTL_FILE.fflush(l_out_file);
l_pos := l_pos + l_amount;
END LOOP;

UTL_FILE.fclose(l_out_file);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_out_file) THEN
UTL_FILE.fclose(l_out_file);
END IF;
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put_local_binary_data (p_data IN BLOB,
p_dir IN VARCHAR2,
p_file IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_out_file UTL_FILE.file_type;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob_len INTEGER;
BEGIN
l_blob_len := DBMS_LOB.getlength(p_data);

l_out_file := UTL_FILE.fopen(p_dir, p_file, 'wb', 32767);

WHILE l_pos <= l_blob_len LOOP
DBMS_LOB.read (p_data, l_amount, l_pos, l_buffer);
UTL_FILE.put_raw(l_out_file, l_buffer, TRUE);
UTL_FILE.fflush(l_out_file);
l_pos := l_pos + l_amount;
END LOOP;

UTL_FILE.fclose(l_out_file);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_out_file) THEN
UTL_FILE.fclose(l_out_file);
END IF;
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put_remote_ascii_data (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_file IN VARCHAR2,
p_data IN CLOB) IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_result PLS_INTEGER;
l_buffer VARCHAR2(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_clob_len INTEGER;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'STOR ' || p_file, TRUE);

l_clob_len := DBMS_LOB.getlength(p_data);

WHILE l_pos <= l_clob_len LOOP
DBMS_LOB.READ (p_data, l_amount, l_pos, l_buffer);
IF g_convert_crlf THEN
l_buffer := REPLACE(l_buffer, CHR(13), NULL);
END IF;
l_result := UTL_TCP.write_text(l_conn, l_buffer, LENGTH(l_buffer));
UTL_TCP.flush(l_conn);
l_pos := l_pos + l_amount;
END LOOP;

UTL_TCP.close_connection(l_conn);
-- The following line allows some people to make multiple calls from one connection.
-- It causes the operation to hang for me, hence it is commented out by default.
-- get_reply(p_conn);

EXCEPTION
WHEN OTHERS THEN
UTL_TCP.close_connection(l_conn);
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put_remote_binary_data (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_file IN VARCHAR2,
p_data IN BLOB) IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_result PLS_INTEGER;
l_buffer RAW(32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
l_blob_len INTEGER;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'STOR ' || p_file, TRUE);

l_blob_len := DBMS_LOB.getlength(p_data);

WHILE l_pos <= l_blob_len LOOP
DBMS_LOB.READ (p_data, l_amount, l_pos, l_buffer);
l_result := UTL_TCP.write_raw(l_conn, l_buffer, l_amount);
UTL_TCP.flush(l_conn);
l_pos := l_pos + l_amount;
END LOOP;

UTL_TCP.close_connection(l_conn);
-- The following line allows some people to make multiple calls from one connection.
-- It causes the operation to hang for me, hence it is commented out by default.
-- get_reply(p_conn);

EXCEPTION
WHEN OTHERS THEN
UTL_TCP.close_connection(l_conn);
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE get (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_from_file IN VARCHAR2,
p_to_dir IN VARCHAR2,
p_to_file IN VARCHAR2) AS
-- --------------------------------------------------------------------------
BEGIN
IF g_binary THEN
put_local_binary_data(p_data => get_remote_binary_data (p_conn, p_from_file),
p_dir => p_to_dir,
p_file => p_to_file);
ELSE
put_local_ascii_data(p_data => get_remote_ascii_data (p_conn, p_from_file),
p_dir => p_to_dir,
p_file => p_to_file);
END IF;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_from_dir IN VARCHAR2,
p_from_file IN VARCHAR2,
p_to_file IN VARCHAR2) AS
-- --------------------------------------------------------------------------
BEGIN
IF g_binary THEN
put_remote_binary_data(p_conn => p_conn,
p_file => p_to_file,
p_data => get_local_binary_data(p_from_dir, p_from_file));
ELSE
put_remote_ascii_data(p_conn => p_conn,
p_file => p_to_file,
p_data => get_local_ascii_data(p_from_dir, p_from_file));
END IF;
get_reply(p_conn);
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE get_direct (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_from_file IN VARCHAR2,
p_to_dir IN VARCHAR2,
p_to_file IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_out_file UTL_FILE.file_type;
l_amount PLS_INTEGER;
l_buffer VARCHAR2(32767);
l_raw_buffer RAW(32767);
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'RETR ' || p_from_file, TRUE);
IF g_binary THEN
l_out_file := UTL_FILE.fopen(p_to_dir, p_to_file, 'wb', 32767);
ELSE
l_out_file := UTL_FILE.fopen(p_to_dir, p_to_file, 'w', 32767);
END IF;

BEGIN
LOOP
IF g_binary THEN
l_amount := UTL_TCP.read_raw (l_conn, l_raw_buffer, 32767);
UTL_FILE.put_raw(l_out_file, l_raw_buffer, TRUE);
ELSE
l_amount := UTL_TCP.read_text (l_conn, l_buffer, 32767);
IF g_convert_crlf THEN
l_buffer := REPLACE(l_buffer, CHR(13), NULL);
END IF;
UTL_FILE.put(l_out_file, l_buffer);
END IF;
UTL_FILE.fflush(l_out_file);
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
WHEN OTHERS THEN
NULL;
END;
UTL_FILE.fclose(l_out_file);
UTL_TCP.close_connection(l_conn);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_out_file) THEN
UTL_FILE.fclose(l_out_file);
END IF;
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE put_direct (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_from_dir IN VARCHAR2,
p_from_file IN VARCHAR2,
p_to_file IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_bfile BFILE;
l_result PLS_INTEGER;
l_amount PLS_INTEGER := 32767;
l_raw_buffer RAW(32767);
l_len NUMBER;
l_pos NUMBER := 1;
ex_ascii EXCEPTION;
BEGIN
IF NOT g_binary THEN
RAISE ex_ascii;
END IF;

l_conn := get_passive(p_conn);
send_command(p_conn, 'STOR ' || p_to_file, TRUE);

l_bfile := BFILENAME(p_from_dir, p_from_file);

DBMS_LOB.fileopen(l_bfile, DBMS_LOB.file_readonly);
l_len := DBMS_LOB.getlength(l_bfile);

WHILE l_pos <= l_len LOOP
DBMS_LOB.READ (l_bfile, l_amount, l_pos, l_raw_buffer);
debug(l_amount);
l_result := UTL_TCP.write_raw(l_conn, l_raw_buffer, l_amount);
l_pos := l_pos + l_amount;
END LOOP;

DBMS_LOB.fileclose(l_bfile);
UTL_TCP.close_connection(l_conn);
EXCEPTION
WHEN ex_ascii THEN
RAISE_APPLICATION_ERROR(-20000, 'PUT_DIRECT not available in ASCII mode.');
WHEN OTHERS THEN
IF DBMS_LOB.fileisopen(l_bfile) = 1 THEN
DBMS_LOB.fileclose(l_bfile);
END IF;
RAISE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE help (p_conn IN OUT NOCOPY UTL_TCP.connection) AS
-- --------------------------------------------------------------------------
BEGIN
send_command(p_conn, 'HELP', TRUE);
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE ascii (p_conn IN OUT NOCOPY UTL_TCP.connection) AS
-- --------------------------------------------------------------------------
BEGIN
send_command(p_conn, 'TYPE A', TRUE);
g_binary := FALSE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE binary (p_conn IN OUT NOCOPY UTL_TCP.connection) AS
-- --------------------------------------------------------------------------
BEGIN
send_command(p_conn, 'TYPE I', TRUE);
g_binary := TRUE;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE list (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_dir IN VARCHAR2,
p_list OUT t_string_table) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_list t_string_table := t_string_table();
l_reply_code VARCHAR2(3) := NULL;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'LIST ' || p_dir, TRUE);

BEGIN
LOOP
l_list.extend;
l_list(l_list.last) := UTL_TCP.get_line(l_conn, TRUE);
debug(l_list(l_list.last));
IF l_reply_code IS NULL THEN
l_reply_code := SUBSTR(l_list(l_list.last), 1, 3);
END IF;
IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN
RAISE_APPLICATION_ERROR(-20000, l_list(l_list.last));
ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND
SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN
EXIT;
END IF;
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
END;

l_list.delete(l_list.last);
p_list := l_list;

utl_tcp.close_connection(l_conn);
get_reply (p_conn);
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE nlst (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_dir IN VARCHAR2,
p_list OUT t_string_table) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
l_list t_string_table := t_string_table();
l_reply_code VARCHAR2(3) := NULL;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'NLST ' || p_dir, TRUE);

BEGIN
LOOP
l_list.extend;
l_list(l_list.last) := UTL_TCP.get_line(l_conn, TRUE);
debug(l_list(l_list.last));
IF l_reply_code IS NULL THEN
l_reply_code := SUBSTR(l_list(l_list.last), 1, 3);
END IF;
IF SUBSTR(l_reply_code, 1, 1) IN ('4', '5') THEN
RAISE_APPLICATION_ERROR(-20000, l_list(l_list.last));
ELSIF (SUBSTR(g_reply(g_reply.last), 1, 3) = l_reply_code AND
SUBSTR(g_reply(g_reply.last), 4, 1) = ' ') THEN
EXIT;
END IF;
END LOOP;
EXCEPTION
WHEN UTL_TCP.END_OF_INPUT THEN
NULL;
END;

l_list.delete(l_list.last);
p_list := l_list;

utl_tcp.close_connection(l_conn);
get_reply (p_conn);
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE rename (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_from IN VARCHAR2,
p_to IN VARCHAR2) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'RNFR ' || p_from, TRUE);
send_command(p_conn, 'RNTO ' || p_to, TRUE);
logout(l_conn, FALSE);
END rename;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE delete (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_file IN VARCHAR2) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'DELE ' || p_file, TRUE);
logout(l_conn, FALSE);
END delete;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE mkdir (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_dir IN VARCHAR2) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'MKD ' || p_dir, TRUE);
logout(l_conn, FALSE);
END mkdir;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE rmdir (p_conn IN OUT NOCOPY UTL_TCP.connection,
p_dir IN VARCHAR2) AS
-- --------------------------------------------------------------------------
l_conn UTL_TCP.connection;
BEGIN
l_conn := get_passive(p_conn);
send_command(p_conn, 'RMD ' || p_dir, TRUE);
logout(l_conn, FALSE);
END rmdir;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE convert_crlf (p_status IN BOOLEAN) AS
-- --------------------------------------------------------------------------
BEGIN
g_convert_crlf := p_status;
END;
-- --------------------------------------------------------------------------



-- --------------------------------------------------------------------------
PROCEDURE debug (p_text IN VARCHAR2) IS
-- --------------------------------------------------------------------------
BEGIN
IF g_debug THEN
DBMS_OUTPUT.put_line(SUBSTR(p_text, 1, 255));
END IF;
END;
-- --------------------------------------------------------------------------

END ftp;
/
SHOW ERRORS

--end--


cnhtm 发表于:2010.06.02 08:34 ::分类: ( oracle监控脚本 ) ::阅读:(279次) :: 评论 (0) :: 引用 (0)
===========================================================
err.pks
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE err AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/err.pks
-- Author : DR Timothy S Hall
-- Description : A simple mechanism for logging error information to a table.
-- Requirements : err.pkb, dsp.pks, dsp.pkb and:
--
-- CREATE TABLE error_logs (
-- id NUMBER(10) NOT NULL,
-- prefix VARCHAR2(50),
-- data VARCHAR2(2000) NOT NULL,
-- error_level NUMBER(2) NOT NULL,
-- created_date DATE NOT NULL,
-- created_by VARCHAR2(50) NOT NULL);
--
-- ALTER TABLE error_logs ADD (CONSTRAINT error_logs_pk PRIMARY KEY (id));
--
-- CREATE SEQUENCE error_logs_seq;
--
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 17-JUL-2003 Tim Hall Initial Creation
-- --------------------------------------------------------------------------

PROCEDURE reset_defaults;

PROCEDURE logs_on;
PROCEDURE logs_off;

PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS');

PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN VARCHAR2,
p_error_level IN NUMBER DEFAULT 5,
p_error_user IN VARCHAR2 DEFAULT USER);

PROCEDURE line (p_data IN VARCHAR2,
p_error_level IN NUMBER DEFAULT 5,
p_error_user IN VARCHAR2 DEFAULT USER);

PROCEDURE display (p_error_level IN NUMBER DEFAULT NULL,
p_error_user IN VARCHAR2 DEFAULT NULL,
p_from_date IN DATE DEFAULT NULL,
p_to_date IN DATE DEFAULT NUll);
END err;
/

SHOW ERRORS

--end--


cnhtm 发表于:2010.06.01 08:31 ::分类: ( oracle监控脚本 ) ::阅读:(318次) :: 评论 (0) :: 引用 (0)
===========================================================
err.pkb
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE BODY err AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/err.pkb
-- Author : DR Timothy S Hall
-- Description : A simple mechanism for logging error information to a table.
-- Requirements : err.pks, dsp.pks, dsp.pkb and schema definied in err.pks
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 17-JUL-2003 Tim Hall Initial Creation
-- --------------------------------------------------------------------------

-- Package Variables
g_logs_on BOOLEAN := TRUE;
g_date_format VARCHAR2(50) := 'DD-MON-YYYY HH24:MI:SS';

-- Exposed Methods

-- --------------------------------------------------------------------------
PROCEDURE reset_defaults IS
-- --------------------------------------------------------------------------
BEGIN
g_logs_on := TRUE;
g_date_format := 'DD-MON-YYYY HH24:MI:SS';
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE logs_on IS
-- --------------------------------------------------------------------------
BEGIN
g_logs_on := TRUE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE logs_off IS
-- --------------------------------------------------------------------------
BEGIN
g_logs_on := FALSE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE set_date_format (p_date_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS') IS
-- --------------------------------------------------------------------------
BEGIN
g_date_format := p_date_format;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN VARCHAR2,
p_error_level IN NUMBER DEFAULT 5,
p_error_user IN VARCHAR2 DEFAULT USER) IS
-- --------------------------------------------------------------------------
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF g_logs_on THEN
INSERT INTO error_logs
(id,
prefix,
data,
error_level,
created_date,
created_by)
VALUES
(error_logs_seq.NEXTVAL,
p_prefix,
p_data,
p_error_level,
SYSDATE,
p_error_user);

COMMIT;
END IF;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_data IN VARCHAR2,
p_error_level IN NUMBER DEFAULT 5,
p_error_user IN VARCHAR2 DEFAULT USER) IS
-- --------------------------------------------------------------------------
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
line (p_prefix => NULL,
p_data => p_data,
p_error_level => p_error_level,
p_error_user => p_error_user);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE display (p_error_level IN NUMBER DEFAULT NULL,
p_error_user IN VARCHAR2 DEFAULT NULL,
p_from_date IN DATE DEFAULT NULL,
p_to_date IN DATE DEFAULT NUll) IS
-- --------------------------------------------------------------------------
CURSOR c_errors IS
SELECT *
FROM error_logs
WHERE error_level = NVL(p_error_level, error_level)
AND created_by = NVL(p_error_user, created_by)
AND created_date >= NVL(p_from_date, created_date)
AND created_date <= NVL(p_to_date, created_date)
ORDER BY id;
BEGIN
FOR cur_rec IN c_errors LOOP
dsp.line(cur_rec.prefix, cur_rec.data);
END LOOP;
END;
-- --------------------------------------------------------------------------

END err;
/

SHOW ERRORS

--end--


cnhtm 发表于:2010.05.31 20:35 ::分类: ( oracle监控脚本 ) ::阅读:(326次) :: 评论 (0) :: 引用 (0)
===========================================================
dsp.pks
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE dsp AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/dsp.pks
-- Author : DR Timothy S Hall
-- Description : An extension of the DBMS_OUTPUT package.
-- Requirements : http://www.oracle-base.com/dba/miscellaneous/dsp.pkb
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 08-JAN-2002 Tim Hall Initial Creation
-- 04-APR-2005 Tim Hall Store last call. Add get_last_prefix and
-- get_last_data to allow retrieval.
-- Switch from date to timestamp for greater accuracy.
-- --------------------------------------------------------------------------

PROCEDURE reset_defaults;

PROCEDURE show_output_on;
PROCEDURE show_output_off;

PROCEDURE show_date_on;
PROCEDURE show_date_off;

PROCEDURE line_wrap_on;
PROCEDURE line_wrap_off;

PROCEDURE set_max_width (p_width IN NUMBER);

PROCEDURE set_date_format (p_date_format IN VARCHAR2);

PROCEDURE file_output_on (p_file_dir IN VARCHAR2 DEFAULT NULL,
p_file_name IN VARCHAR2 DEFAULT NULL);

PROCEDURE file_output_off;

FUNCTION get_last_prefix
RETURN VARCHAR2;

FUNCTION get_last_data
RETURN VARCHAR2;

PROCEDURE line (p_data IN VARCHAR2);
PROCEDURE line (p_data IN NUMBER);
PROCEDURE line (p_data IN BOOLEAN);
PROCEDURE line (p_data IN DATE,
p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF');

PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN VARCHAR2);
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN NUMBER);
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN BOOLEAN);
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN DATE,
p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF');

END dsp;
/

SHOW ERRORS

--end--


cnhtm 发表于:2010.05.28 20:32 ::分类: ( oracle监控脚本 ) ::阅读:(358次) :: 评论 (0) :: 引用 (0)
===========================================================
dsp.pkb
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE BODY dsp AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/dsp.pkb
-- Author : DR Timothy S Hall
-- Description : An extension of the DBMS_OUTPUT package.
-- Requirements : http://www.oracle-base.com/dba/miscellaneous/dsp.pks
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 08-JAN-2002 Tim Hall Initial Creation.
-- 04-APR-2005 Tim Hall Store last call. Add get_last_prefix and
-- get_last_data to allow retrieval.
-- Switch from date to timestamp for greater accuracy.
-- --------------------------------------------------------------------------

-- Package Variables
g_show_output BOOLEAN := FALSE;
g_show_date BOOLEAN := FALSE;
g_line_wrap BOOLEAN := TRUE;
g_max_width NUMBER(10) := 255;
g_date_format VARCHAR2(32767) := 'DD-MON-YYYY HH24:MI:SS.FF';
g_file_dir VARCHAR2(32767) := NULL;
g_file_name VARCHAR2(32767) := NULL;
g_last_prefix VARCHAR2(32767) := NULL;
g_last_data VARCHAR2(32767) := NULL;

-- Hidden Methods
PROCEDURE display (p_prefix IN VARCHAR2,
p_data IN VARCHAR2);
PROCEDURE wrap_line (p_data IN VARCHAR2);
PROCEDURE output (p_data IN VARCHAR2);


-- Exposed Methods

-- --------------------------------------------------------------------------
PROCEDURE reset_defaults IS
-- --------------------------------------------------------------------------
BEGIN
g_show_output := FALSE;
g_show_date := FALSE;
g_line_wrap := TRUE;
g_max_width := 255;
g_date_format := 'DD-MON-YYYY HH24:MI:SS.FF';
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE show_output_on IS
-- --------------------------------------------------------------------------
BEGIN
g_show_output := TRUE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE show_output_off IS
-- --------------------------------------------------------------------------
BEGIN
g_show_output := FALSE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE show_date_on IS
-- --------------------------------------------------------------------------
BEGIN
g_show_date := TRUE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE show_date_off IS
-- --------------------------------------------------------------------------
BEGIN
g_show_date := FALSE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line_wrap_on IS
-- --------------------------------------------------------------------------
BEGIN
g_line_wrap := TRUE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line_wrap_off IS
-- --------------------------------------------------------------------------
BEGIN
g_line_wrap := FALSE;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE set_max_width (p_width IN NUMBER) IS
-- --------------------------------------------------------------------------
BEGIN
g_max_width := p_width;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE set_date_format (p_date_format IN VARCHAR2) IS
-- --------------------------------------------------------------------------
BEGIN
g_date_format := p_date_format;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE file_output_on (p_file_dir IN VARCHAR2 DEFAULT NULL,
p_file_name IN VARCHAR2 DEFAULT NULL) IS
-- --------------------------------------------------------------------------
BEGIN
g_file_dir := p_file_dir;
g_file_name := p_file_name;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE file_output_off IS
-- --------------------------------------------------------------------------
BEGIN
g_file_dir := NULL;
g_file_name := NULL;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
FUNCTION get_last_prefix
RETURN VARCHAR2 IS
-- --------------------------------------------------------------------------
BEGIN
RETURN g_last_prefix;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
FUNCTION get_last_data
RETURN VARCHAR2 IS
-- --------------------------------------------------------------------------
BEGIN
RETURN g_last_data;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_data IN VARCHAR2) IS
-- --------------------------------------------------------------------------
BEGIN
display (NULL, p_data);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_data IN NUMBER) IS
-- --------------------------------------------------------------------------
BEGIN
display (NULL, p_data);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_data IN BOOLEAN) IS
-- --------------------------------------------------------------------------
BEGIN
line (NULL, p_data);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_data IN DATE,
p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF') IS
-- --------------------------------------------------------------------------
BEGIN
line (NULL, p_data, p_format);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN VARCHAR2) IS
-- --------------------------------------------------------------------------
BEGIN
display (p_prefix, p_data);
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN NUMBER) IS
-- --------------------------------------------------------------------------
BEGIN
display (p_prefix, TO_CHAR(p_data));
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN BOOLEAN) IS
-- --------------------------------------------------------------------------
BEGIN
IF p_data THEN
display (p_prefix, 'TRUE');
ELSE
display (p_prefix, 'FALSE');
END IF;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE line (p_prefix IN VARCHAR2,
p_data IN DATE,
p_format IN VARCHAR2 DEFAULT 'DD-MON-YYYY HH24:MI:SS.FF') IS
-- --------------------------------------------------------------------------
BEGIN
display (p_prefix, TO_CHAR(p_data, p_format));
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE display (p_prefix IN VARCHAR2,
p_data IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_data VARCHAR2(32767) := p_data;
BEGIN
g_last_prefix := p_prefix;
g_last_data := p_data;
IF g_show_output THEN
IF l_data IS NULL THEN
l_data := '';
END IF;

IF p_prefix IS NOT NULL THEN
l_data := p_prefix || ' : ' || l_data;
END IF;

IF g_show_date THEN
l_data := TO_CHAR(SYSTIMESTAMP, g_date_format) || ' : ' || l_data;
END IF;

IF Length(l_data) > g_max_width THEN
IF g_line_wrap THEN
wrap_line (l_data);
ELSE
l_data := SUBSTR(l_data, 1, g_max_width);
output (l_data);
END IF;
ELSE
output (l_data);
END IF;
END IF;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE wrap_line (p_data IN VARCHAR2) IS
-- --------------------------------------------------------------------------
l_data VARCHAR2(32767) := p_data;
BEGIN
LOOP
display (NULL, SUBSTR(l_data, 1, g_max_width));
l_data := SUBSTR(l_data, g_max_width + 1);
EXIT WHEN l_data IS NULL;
END LOOP;
END;
-- --------------------------------------------------------------------------


-- --------------------------------------------------------------------------
PROCEDURE output (p_data IN VARCHAR2) IS
-- --------------------------------------------------------------------------
BEGIN
IF g_file_dir IS NULL OR g_file_name IS NULL THEN
DBMS_OUTPUT.put_line(p_data);
ELSE
DECLARE
l_file UTL_FILE.file_type;
BEGIN
l_file := UTL_FILE.fopen (g_file_dir, g_file_name, 'A');
UTL_FILE.put_line(l_file, p_data);
UTL_FILE.fclose (l_file);
EXCEPTION
WHEN OTHERS THEN
UTL_FILE.fclose (l_file);
END;
END IF;
END;
-- --------------------------------------------------------------------------

END dsp;
/

SHOW ERRORS

--end--


cnhtm 发表于:2010.05.27 20:29 ::分类: ( oracle监控脚本 ) ::阅读:(226次) :: 评论 (0) :: 引用 (0)
===========================================================
drop_all.sql
===========================================================

摘自http://www.oracle-base.com

-- -----------------------------------------------------------------------------------
-- File Name : http://www.oracle-base.com/dba/miscellaneous/drop_all.sql
-- Author : DR Timothy S Hall
-- Description : Drops all objects within the current schema.
-- Call Syntax : @drop_all
-- Last Modified: 20/01/2006
-- Notes : Loops a maximum of 5 times, allowing for failed drops due to dependencies.
-- Quits outer loop if no drops were atempted.
-- -----------------------------------------------------------------------------------
SET SERVEROUTPUT ON
DECLARE
l_count NUMBER;
l_cascade VARCHAR2(20);
BEGIN
<< dependency_failure_loop >>
FOR i IN 1 .. 5 LOOP
EXIT dependency_failure_loop WHEN l_count = 0;
l_count := 0;

FOR cur_rec IN (SELECT object_name, object_type
FROM user_objects) LOOP
BEGIN
l_count := l_count + 1;
l_cascade := NULL;
IF cur_rec.object_type = 'TABLE' THEN
l_cascade := ' CASCADE CONSTRAINTS';
END IF;
EXECUTE IMMEDIATE 'DROP ' || cur_rec.object_type || ' "' || cur_rec.object_name || '"' || l_cascade;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END LOOP;
-- Comment out the following line if you are pre-10g, or want to preserve the recyclebin contents.
EXECUTE IMMEDIATE 'PURGE RECYCLEBIN';
DBMS_OUTPUT.put_line('Pass: ' || i || ' Drops: ' || l_count);
END LOOP;
END;
/

--end--


cnhtm 发表于:2010.05.26 08:25 ::分类: ( oracle监控脚本 ) ::阅读:(281次) :: 评论 (0) :: 引用 (0)
===========================================================
dict_comments.sql
===========================================================

摘自http://www.oracle-base.com

-- -----------------------------------------------------------------------------------
-- File Name : http://www.oracle-base.com/dba/miscellaneous/dict_comments.sql
-- Author : DR Timothy S Hall
-- Description : Displays comments associate with specific tables.
-- Requirements : Access to the DBA views.
-- Call Syntax : @dict_comments (table-name or partial match)
-- Last Modified: 15/07/2000
-- -----------------------------------------------------------------------------------
PROMPT
SET VERIFY OFF
SET FEEDBACK OFF
SET LINESIZE 255
SET PAGESIZE 1000

SELECT a.table_name "Table",
Substr(a.comments,1,200) "Comments"
FROM dictionary a
WHERE a.table_name LIKE Upper('%&1%');

SET VERIFY ON
SET FEEDBACK ON
SET PAGESIZE 14
PROMPT

--end--


cnhtm 发表于:2010.05.25 09:36 ::分类: ( oracle监控脚本 ) ::阅读:(300次) :: 评论 (0) :: 引用 (0)
===========================================================
csv.sql
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE csv AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/cvs.sql
-- Author : DR Timothy S Hall
-- Description : Basic CSV API. For usage notes see:
-- http://www.oracle-base.com/articles/9i/GeneratingCSVFiles.php
--
-- CREATE OR REPLACE DIRECTORY dba_dir AS '/u01/app/oracle/dba/';
-- ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
--
-- EXEC csv.generate('DBA_DIR', 'generate.csv', p_query => 'SELECT * FROM emp');
--
-- Requirements : UTL_FILE, DBMS_SQL
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 14-MAY-2005 Tim Hall Initial Creation
-- --------------------------------------------------------------------------

PROCEDURE generate (p_dir IN VARCHAR2,
p_file IN VARCHAR2,
p_query IN VARCHAR2);
END csv;
/
SHOW ERRORS

CREATE OR REPLACE PACKAGE BODY csv AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/cvs.sql
-- Author : DR Timothy S Hall
-- Description : Basic CSV API. For usage notes see:
-- http://www.oracle-base.com/articles/9i/GeneratingCSVFiles.php
--
-- CREATE OR REPLACE DIRECTORY dba_dir AS '/u01/app/oracle/dba/';
-- ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
--
-- EXEC csv.generate('DBA_DIR', 'generate.csv', p_query => 'SELECT * FROM emp');
--
-- Requirements : UTL_FILE, DBMS_SQL
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 14-MAY-2005 Tim Hall Initial Creation
-- --------------------------------------------------------------------------

g_sep VARCHAR2(5) := ',';

PROCEDURE generate (p_dir IN VARCHAR2,
p_file IN VARCHAR2,
p_query IN VARCHAR2) AS
l_cursor PLS_INTEGER;
l_rows PLS_INTEGER;
l_col_cnt PLS_INTEGER;
l_desc_tab DBMS_SQL.desc_tab;
l_buffer VARCHAR2(32767);

l_file UTL_FILE.file_type;
BEGIN
l_cursor := DBMS_SQL.open_cursor;
DBMS_SQL.parse(l_cursor, p_query, DBMS_SQL.native);

DBMS_SQL.describe_columns (l_cursor, l_col_cnt, l_desc_tab);

FOR i IN 1 .. l_col_cnt LOOP
DBMS_SQL.define_column(l_cursor, i, l_buffer, 32767 );
END LOOP;

l_rows := DBMS_SQL.execute(l_cursor);

l_file := UTL_FILE.fopen(p_dir, p_file, 'w', 32767);

-- Output the column names.
FOR i IN 1 .. l_col_cnt LOOP
IF i > 1 THEN
UTL_FILE.put(l_file, g_sep);
END IF;
UTL_FILE.put(l_file, l_desc_tab(i).col_name);
END LOOP;
UTL_FILE.new_line(l_file);

-- Output the data.
LOOP
EXIT WHEN DBMS_SQL.fetch_rows(l_cursor) = 0;

FOR i IN 1 .. l_col_cnt LOOP
IF i > 1 THEN
UTL_FILE.put(l_file, g_sep);
END IF;

DBMS_SQL.COLUMN_VALUE(l_cursor, i, l_buffer);
UTL_FILE.put(l_file, l_buffer);
END LOOP;
UTL_FILE.new_line(l_file);
END LOOP;

UTL_FILE.fclose(l_file);
EXCEPTION
WHEN OTHERS THEN
IF UTL_FILE.is_open(l_file) THEN
UTL_FILE.fclose(l_file);
END IF;
IF DBMS_SQL.is_open(l_cursor) THEN
DBMS_SQL.close_cursor(l_cursor);
END IF;
RAISE;
END generate;

END csv;
/
SHOW ERRORS

--end--


cnhtm 发表于:2010.05.24 09:39 ::分类: ( oracle监控脚本 ) ::阅读:(292次) :: 评论 (0) :: 引用 (0)
===========================================================
conversion_api.sql
===========================================================

摘自http://www.oracle-base.com

CREATE OR REPLACE PACKAGE conversion_api AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/conversion_api
-- Author : DR Timothy S Hall
-- Description : Provides some base conversion functions.
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 10-SEP-2003 Tim Hall Initial Creation
-- --------------------------------------------------------------------------

FUNCTION to_base(p_dec IN NUMBER,
p_base IN NUMBER) RETURN VARCHAR2;

FUNCTION to_dec (p_str IN VARCHAR2,
p_from_base IN NUMBER DEFAULT 16) RETURN NUMBER;

FUNCTION to_hex(p_dec IN NUMBER) RETURN VARCHAR2;

FUNCTION to_bin(p_dec IN NUMBER) RETURN VARCHAR2;

FUNCTION to_oct(p_dec IN NUMBER) RETURN VARCHAR2;

END conversion_api;
/
SHOW ERRORS


CREATE OR REPLACE PACKAGE BODY conversion_api AS
-- --------------------------------------------------------------------------
-- Name : http://www.oracle-base.com/dba/miscellaneous/conversion_api
-- Author : DR Timothy S Hall
-- Description : Provides some base conversion functions.
-- Ammedments :
-- When Who What
-- =========== ======== =================================================
-- 10-SEP-2003 Tim Hall Initial Creation
-- --------------------------------------------------------------------------



-- ----------------------------------------------------------------------------
FUNCTION to_base(p_dec IN NUMBER,
p_base IN NUMBER) RETURN VARCHAR2 IS
-- ----------------------------------------------------------------------------
l_str VARCHAR2(255) DEFAULT NULL;
l_num NUMBER DEFAULT p_dec;
l_hex VARCHAR2(16) DEFAULT '0123456789ABCDEF';
BEGIN
IF (TRUNC(p_dec) <> p_dec OR p_dec < 0) THEN
RAISE PROGRAM_ERROR;
END IF;
LOOP
l_str := SUBSTR(l_hex, MOD(l_num,p_base)+1, 1) || l_str;
l_num := TRUNC(l_num/p_base);
EXIT WHEN (l_num = 0);
END LOOP;
RETURN l_str;
END to_base;
-- ----------------------------------------------------------------------------


-- ----------------------------------------------------------------------------
FUNCTION to_dec (p_str IN VARCHAR2,
p_from_base IN NUMBER DEFAULT 16) RETURN NUMBER IS
-- ----------------------------------------------------------------------------
l_num NUMBER DEFAULT 0;
l_hex VARCHAR2(16) DEFAULT '0123456789ABCDEF';
BEGIN
FOR i IN 1 .. LENGTH(p_str) LOOP
l_num := l_num * p_from_base + INSTR(l_hex,UPPER(SUBSTR(p_str,i,1)))-1;
END LOOP;
RETURN l_num;
END to_dec;
-- ----------------------------------------------------------------------------


-- ----------------------------------------------------------------------------
FUNCTION to_hex(p_dec IN NUMBER) RETURN VARCHAR2 IS
-- ----------------------------------------------------------------------------
BEGIN
RETURN to_base(p_dec, 16);
END to_hex;
-- ----------------------------------------------------------------------------


-- ----------------------------------------------------------------------------
FUNCTION to_bin(p_dec IN NUMBER) RETURN VARCHAR2 IS
-- ----------------------------------------------------------------------------
BEGIN
RETURN to_base(p_dec, 2);
END to_bin;
-- ----------------------------------------------------------------------------


-- ----------------------------------------------------------------------------
FUNCTION to_oct(p_dec IN NUMBER) RETURN VARCHAR2 IS
-- ----------------------------------------------------------------------------
BEGIN
RETURN to_base(p_dec, 8);
END to_oct;
-- ----------------------------------------------------------------------------

END conversion_api;
/
SHOW ERRORS

--end--


cnhtm 发表于:2010.05.21 22:14 ::分类: ( oracle监控脚本 ) ::阅读:(262次) :: 评论 (0) :: 引用 (0)