sql*plus参数传递
关于sql*plus里面参数传递的设置和命令[@more@]SQL> column object_name format a15 SQL> column object_id format 999,999 SQL> column object_type format a15 1. SET DEFINE 变量替换标志,默认为'&',可以用set define命令修改成其他字符,如'*'等 SQL> show define define "&" (hex 26) SQL> select object_name,&col2 2 from dba_objects 3 where rownum<2; Enter value for col2: object_id old 1: select object_name,&col2 new 1: select object_name,ob
在sql*plus里编辑SQL命令
常用的编辑命令,包括append, change, input, del, list, clear buffer等[@more@]SQL> select owner,object_nam 2 from dba_objects;select owner,object_nam*ERROR at line 1:ORA-00904: "OBJECT_NAM": invalid identifier1. 将object_name改成object_name,用change (C)SQL> c/nam/name1* select owner,object_name查看修改后结果,用listSQL> list1 select owner,object_name2* from dba_objects SQL> / 2. 在结果集中增加一列object_id,用append (A)--先列出buffer中第一行sqlSQL> list 11* select owner,o
在sql*plus里制作报表 (4)
介绍两个经典的制作报表台头(TITLE)的脚本,该脚本可在台头中显示当前的日期,时间,连接的用户名,当前页码,同时用户可以自己输入抬头标题title80.sql -- 报表的行宽为80个字符title132.sql -- 报表的行宽为132个字符[@more@]title80.sql脚本:可参见http://www.redwingnet.com/hioug/Presentations/Kens-25-Jun-05-Presentation/TITLE80.SQLremrem TITLE80.SQL remrem FUNCTION: This SQL*Plus script builds a standard report heading rem heading for database reports that are 80 columns remcolumn TODAY N
在sql*plus里制作报表 (3)
如何定制台头(TITLE)部分[@more@]20. 给sql结果加上title,做成报表用TTITLE和BTITLE命令TTITLE: Top TitleBTITLE: Bottom Title上述命令可以加参数 CENTER/LEFT/RIGHT确定TITLE的位置居中,还是在左/右侧,也可以用COL n设定从第n列开始显示TITLESQL> TTITLE CENTER 'TEST TOP TITLE' skip 1 -> COL 40 '--by zhyuh'SQL> BTITLE CENTER 'ACCENTURE CONFIDENTIAL'SQL> select object_name,object_type from user_objects where rownum<6;21. 如果某个TITLE内容特别长,可以用以下办法 SQL>
在sql*plus里制作报表 (2)
行显示设置部分主要包括压缩某一列的重复行,尾部增加统计信息[@more@]11. 某一列如果在多条记录中有相同的值,显示时只显示一条一般用在ORDER BY的列中SQL> column owner format a15SQL> column object_name format a2512. 在SYS和SYSTEM的纪录之间加入一条空格行SQL> break on owner skip 1SQL> /13. 在SYS和SYSTEM的纪录之间换页SQL> break on owner skip page14. 在报表的底部增加一统计行统计信息包括SUM: 某一列求和 MINIMUM: 最小值 MAXIMUM: 最大值 AVG: 平均值 STD: 标准差VARIANCE: 方差 COUNT: 值
在sql*plus里制作报表 (1)
列显示设置部分[@more@]以表dba_users为例SQL> select username,user_id,default_tablespace from dba_users where username='OUTLN';1. 改变username列的显示宽度SQL> column username format a10SQL> /2. 改变列user_id的显示头(Heading)SQL> column user_id heading 'user ID'SQL> /3. 将列default_tablespace分成两行显示SQL> column default_tablespace heading DEFAULT|TABLESPACE format a12SQL> /4. 改变column head下面的分割线类型SQL> set underline *SQL> /5. 显示某一列的显示格式设置SQL> co
SHARED POOL (6)
察看Library Cache信息[@more@]rem rem Title: libcache.sql rem rem FUNCTION: Generate a library cache report rem column namespace heading "Library Object" column gets format 9,999,999 heading "Gets" column gethitratio format 999.99 heading "Get Hit%" column pins format 9,999,999 heading "Pins" column pinhitratio format 999.99 heading "Pin Hit%" column reloads format 99,999 heading "Reloads" column invalidations format 99,999 he
SHARED POOL (5)
判断哪些stored procedure和package应该pin在shared pool里[@more@]rem rem FUNCTION: Report Stored Object Statistics rem column owner format a11 heading Schema column name format a30 heading Object|Name column namespace heading Name|Space column type heading Object|Type column kept format a4 heading Kept column sharable_mem format 999,999 heading Shared|Memory column executions format 999,999 heading Executes set lines 132 pages 47 feedback off @title132 'Oracle Objects Report' break on
SHARED POOL (4)
在shared pool中,确定每个用户的Good SQL和Bad SQL所占的内存比例。[@more@]1. 先建立区分Good和Garbage SQL的视图 运行一次以上的sql定义为Good 只运行一次的定义为Garbage 根据业务特点,可以调整Good SQL和Bad SQL的区分标准,即调整标准的运行次数a.executions REM REM View to sort SQL into GOOD and GARBAGE REM CREATE OR REPLACE VIEW sql_garbage AS SELECT b.username users, SUM(a.sharable_mem+a.persistent_mem) Garbage, TO_NUMBER(null) good FROM sys.v_
SHARED POOL (2)
显示每个用户在shared pool 中的内存使用情况[@more@]先建立视图sql_summary,以备后面脚本调用: rem FUNCTION: Creates summary of v_$sqlarea and dba_users for use in rem sqlmem.sql and sqlsummanry.sql reports rem rem create or replace view sql_summary as select username, &nb
SHARED POOL (1)
检查当前 shared pool 空间使用情况,包括已用空间,剩余空间,使用率等[@more@]REM Script to report on shared pool usageREMcolumn shared_pool_used format 9,999.99column shared_pool_size format 9,999.99column shared_pool_avail format 9,999.99column shared_pool_pct format 999.99start title80 'Shared Pool Summary'spool shared_pool.outselect sum(a.bytes)/(1024*1024) shared_pool_used, max(b.value)/(1024*1024) shared_pool_size, (max(b.value)-sum(a.bytes))/(1024*1024) shared_pool_avail, (sum(a.bytes)/
深入了解SCN
SCN: System Change NumberSCN是顺序递增的一个数字,在Oracle 中用来标识数据库的每一次改动,及其先后顺序。SCN的最大值是0xffff.ffffffff。[@more@]Oracle对SCN的管理单节点的Instance中 单节点的instance中,SCN值存在SGA区,由system commit number latch保护。任何进程要得到当前的SCN值,都要先得到这个latch。RAC/OPS环境中Oracle通过排队机制(Enqueue)实现SCN在各并行节点之间的顺序增长。具体有两种方法: Lamport算法:又称面包房算法,先来先服务算法。跟很多银行采用的排队机制一样。客户到了银行,先领取一个服务号
OWI --用 stored procedure 收集session wait 信息
包括对象如下:event_seq: 序列,用于唯一标识每一条记录dc_event_data: 表,用于存储session wait信息dc_collect:存储过程,用于定期收集各个session wait信息,并保存到dc_event_data表中。根据建议,频率可保持在一分钟一次,而不影响系统性能。dc_analyze: stored procedure. 用于分析和具体化表dc_event_data中的记录--想法来源于<<Oracle Wait Interface A Practical Guide to Performance Diagnostics & Tuning>>[@more@]--------------------------------------------SEQUENCE:-- event_seq 这个序列其实不是很有
OWI -- 用 logoff trigger 保留每个 session 的性能信息
如果某个开发人员跟你说他的程序最近跑得很慢,你问他做了什么修改,他说没有。你说能不能跑给你看一下,他说程序只在每天凌晨跑。这时候收集每个session的性能历史信息就很重要。event 10046对于不确定的session,收集信息太多,成本太高。statspack缺乏追踪每一个数据库连接的功能。用l ogoff trigger 是个不错的选择,该 trigger 会在每个 session 正常退出时自动触发。脚本如下,可根据具体情况作适当修改。--from <<Oracle Wait Interface A Practical Guide to Performance Diagnostics & Tuning>>[@more@]--创建表
REF CURSOR 小结 (4)
用REF CURSOR实现BULK功能1. To speed up INSERT, UPDATE, and DELETE statements, enclose the SQL statement within a PL/SQL FORALL statement instead of a loop construct.2. To speed up SELECT statements, include the BULK COLLECT INTO clause in the SELECT statement instead of using INTO.[@more@]SQL> create table tab2 as select empno ID, ename NAME, sal SALARY from emp where 1=2;Table created-------------------------------------------------------create or replace procedure REF_BULK is type empcurty
REF CURSOR 小结 (3)
使用Weak REF CURSOR例子[@more@]--procedure open_cv---------------------------------------create or replace procedure open_cv(choice IN INT, return_cv OUT SYS_REFCURSOR) is --参数return_cv为weak REF CURSOR,利用SYS_CURSOR来定义begin if choice = 1 then open return_cv for 'select * from emp'; elsif choice = 2 then open return_cv for 'select * from dept'; end if;end open_cv;--procedure retrieve_data------------------------------------create or rep
REF CURSOR 小结 (1)
利用REF CURSOR,可以在程序间传递结果集(一个程序里打开游标变量,在另外的程序里处理数据)。也可以利用REF CURSOR实现BULK SQL,提高SQL性能。[@more@]REF CURSOR分两种,Strong REF CURSOR 和 Weak REF CURSOR。Strong REF CURSOR:指定retrun type,CURSOR变量的类型必须和return type一致。DECLARETYPE strongcurtyp IS REF CURSOR RETURN emp%ROWTYPE;emp_cv strongcurtyp;Weak REF CURSOR:不指定return type,能和任何类型的CURSOR变量匹配。DECLARETYPE weakcurtyp IS REF CURSOR;weak_cv weakcurtyp;any_cv SYS_REFCURSOR; --使
关于权限的一个疑问
用户有dba role后,就会具有dba role所包含的select any table权限,但是这个权限在用户的stored procedure中并不起作用,必须要单独授权。[@more@]以上结论是正确的,可以用下面的小实验验证。1。创建用户aaa并授予connect, resource, dba角色SQL> create user aaa identified by aaa default tablespace users temporary tablespace temp;User createdSQL> grant connect,resource,dba to aaa;Grant succeeded2。用户aaa登陆后创建一个public synonym,然后在一个存储过程中使用这个synonymSQL> connect aaa/aaaConnected to O
在sql*plus中显示长字符
Oracle中,一些varchar2或clob类型的长字符串,经常在sql*plus中无法全部显示。[@more@]比如:SQL> create table aaa(col1 clob);Table created.SQL> insert into aaa values('aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqrrrssstttuuuvvvwwwxxxyyyzzzaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrssstttuuuvvvwwwxxxyyyzzzaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrsstttuuuvvvwwwxxxyyyzzzaaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrstttuuuvvvwwwxxxyyyzzzaaabbbcccdddeeefffggghhhii
'library cache lock'等待事件的处理方法
'library cache lock'等待事件,可以用如下办法找到hold lock的那个session。此处只列出了一种方法。[@more@]1.SQL> desc v$lock;Name Type Nullable Default Comments ------- ----------- -------- ------- -------- ADDR RAW(4) Y KADDR RAW(4) Y SID NUMBER Y TYPE VARCHAR2(2) Y ID1 NUMBER Y ID2 NUMBER Y LMODE