監控SQLsql
1.監控事例的等待:數據庫
select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)c#
from v$session_wait數組
group by event order by 4;緩存
2.回滾段的爭用狀況:服務器
select name,waits,gets,waits/gets ratio from v$rollstat a,v$rollname b where a.usn=b.usn;網絡
3.監控表空間的I/O 比例:session
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw,併發
f.phyblkwrt pbworacle
from v$filestat f,dba_data_files df
where f.file#=df.file_id
4.監空文件系統的I/O 比例:
select substr(a.file#,1,2) "#",substr(a.name,1,30) "name",a.status,a.bytes,
b.phyrds,b.phywrts
from v$datafile a,v$filestat b
where a.file#=b.file#
5.在某個用戶下找全部的索引:
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
6.進程監控:
select distinct p.spid unix_process,
s.terminal,
to_char(s.logon_time,'YYYY/MON/DD HH24:MI') Logon_Time,
s.username
from v$process p, v$session s
where p.addr=s.paddr order by 2
7. 監控 SGA 中字典緩衝區的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;
8. 監控 SGA 中共享緩存區的命中率,應該小於1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;
select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
from v$librarycache;
9. 顯示全部數據庫對象的類別和大小
select count(name) num_instances ,type ,sum(source_size) source_size ,
sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
from dba_object_size
group by type order by 2;
10. 監控 SGA 中重作日誌緩存區的命中率,應該小於1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
11. 監控內存和硬盤的排序比率,最好使它小於 .10,增長 sort_area_size
SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');
12. 監控當前數據庫誰在運行什麼SQL語句
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
13. 監控字典緩衝區
SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;
後者除之前者,此比率小於1%,接近0%爲好。
SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
FROM V$ROWCACHE
14. 找ORACLE 字符集
select * from sys.props$ where name='NLS_CHARACTERSET';
15. 監控 MTS
select busy/(busy+idle) "shared servers busy" from v$dispatcher;
此值大於0.5 時,參數需加大
select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher';
select count(*) from v$dispatcher;
select servers_highwater from v$mts;
servers_highwater 接近mts_max_servers 時,參數需加大
16. 碎片程度
select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name
having count(tablespace_name)>10;
alter tablespace name coalesce;
alter table name deallocate unused;
create or replace view ts_blocks_v as
select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space
union all
select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
select * from ts_blocks_v;
select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space
group by tablespace_name;
查看碎片程度高的表
SELECT segment_name table_name , COUNT(*) extents
FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);
17. 表、索引的存儲狀況檢查
select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
tablespace_name='&tablespace_name' and segment_type='TABLE' group by
tablespace_name,segment_name;
select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'
group by segment_name;
18、找使用CPU 多的用戶session
12 是cpu used by this session
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
20.監控log_buffer 的使用狀況:(值最好小於1%,不然增長log_buffer 的大小)
select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';
19、查看運行過的SQL 語句:
SELECT SQL_TEXT
FROM V$SQL
經常使用用戶SQL
表:
select * from cat;
select * from tab;
select table_name from user_tables;
視圖:
select text from user_views where view_name=upper('&view_name');
索引:
select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by
table_name;
觸發器:
select trigger_name,trigger_type,table_owner,table_name,status from user_triggers;
快照:
select owner,name,master,table_name,last_refresh,next from user_snapshots order by
owner,next;
同義詞:
select * from syn;
序列:
select * from seq;
數據庫鏈路:
select * from user_db_links;
約束限制:
select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS
from user_constraints WHERE TABLE_name=upper('&TABLE_Name');
本用戶讀取其餘用戶對象的權限:
select * from user_tab_privs;
本用戶所擁有的系統權限:
select * from user_sys_privs;
用戶:
select * from all_users order by user_id;
表空間剩餘自由空間狀況:
select tablespace_name,sum(bytes) 總字節數,max(bytes),count(*) from dba_free_space group
by tablespace_name;
數據字典:
select table_name from dict order by table_name;
鎖及資源信息:
select * from v$lock;不包括DDL 鎖
數據庫字符集:
select name,value$ from props$ where name='NLS_CHARACTERSET';
inin.ora 參數:
select name,value from v$parameter order by name;
SQL 共享池:
select sql_text from v$sqlarea;
數據庫:
select * from v$database
控制文件:
select * from V$controlfile;
重作日誌文件信息:
select * from V$logfile;
來自控制文件中的日誌文件信息:
select * from V$log;
來自控制文件中的數據文件信息:
select * from V$datafile;
NLS 參數當前值:
select * from V$nls_parameters;
ORACLE 版本信息:
select * from v$version;
描述後臺進程:
select * from v$bgprocess;
查看版本信息:
select * from product_component_version;
查詢表結構
select substr(table_name,1,20) tabname,
substr(column_name,1,20)column_name,
rtrim(data_type)||'('||data_length||')' from system.dba_tab_columns
where owner='username'
表空間使用狀態
select a.file_id "FileNo",a.tablespace_name "Tablespace_name",
round(a.bytes/1024/1024,4) "Total MB",
round((a.bytes-sum(nvl(b.bytes,0)))/1024/1024,4) "Used MB",
round(sum(nvl(b.bytes,0))/1024/1024,4) "Free MB",
round(sum(nvl(b.bytes,0))/a.bytes*100,4) "%Free"
from dba_data_files a, dba_free_space b
where a.file_id=b.file_id(+)
group by a.tablespace_name,
a.file_id,a.bytes order by a.tablespace_name
查詢某個模式下面數據不爲空的表
declare
Cursor c is select TNAME from tab;
vCount Number;
table_nm Varchar2(100);
sq varchar2(300);
begin
for r in c loop
table_nm:=r.TNAME;
sq:='select count(*) from '|| table_nm;
execute immediate sq into vCount;
if vCount>0 then
dbms_output.put_line(r.tname);
end if;
end loop;
end;
客戶端主機信息
SELECT
SYS_CONTEXT('USERENV','TERMINAL') TERMINAL,
SYS_CONTEXT('USERENV','HOST') HOST,
SYS_CONTEXT('USERENV','OS_USER') OS_USER,
SYS_CONTEXT('USERENV','IP_ADDRESS') IP_ADDRESS
FROM DUAL
安裝Oracle 後,常用的修改表空間的SQL 代碼
配置:
Windows NT 4.0 中文版
5 塊10.2GB SCSI 硬盤
分:C:盤、D:盤、E:盤、F:盤、G:盤
Oracle 8.0.4 for Windows NT
NT 安裝在C:\WINNT,Oracle 安裝在C:\ORANT
目標:
因系統的回滾段過小,現打算生成新的回滾段,
創建大的、新的表空間(數據表空間、索引表空間、回滾表空間、臨時表空間、)
建兩個數據表空間、兩個索引表空間,這樣建的目的是根據實際應用,
如:現有10 個應用用戶,每一個用戶是一個獨立子系統(如:商業進銷存MIS系統中的財務、收款、庫存、
人事、總經理等)
尤爲大型商場中收款機衆多,同時訪問進程不少,常常達到50-100 個進程同時訪問,
這樣,經過創建多個用戶表空間、索引表空間,把各個用戶分別建在不一樣的表空間裏(多個用戶表空間放
在不一樣的物理磁盤上),
減小了用戶之間的I/O 競爭、讀寫數據與寫讀索引的競爭(用戶表空間、索引表空間也分別放在不一樣的物
理磁盤上)
規劃:
C:盤、NT 系統,Oracle 系統
D:盤、數據表空間1(3GB、自動擴展)、回滾表空間1(1GB、自動擴展)
E:盤、數據表空間2(3GB、自動擴展)、回滾表空間2(1GB、自動擴展)
F:盤、索引表空間1(2GB、自動擴展)、臨時表空間1(0.5GB、不自動擴展)
G:盤、索引表空間2(2GB、自動擴展)、臨時表空間2(0.5GB、不自動擴展)
注:這只是一個簡單的規劃,實際規劃要依系統需求來定,儘可能減小I/O 競爭
實現:
1、首先查看系統有哪些回滾段及其狀態。
SQL> col owner format a20
SQL> col status format a10
SQL> col segment_name format a20
SQL> col tablespace_name format a20
SQL> SELECT OWNER,SEGMENT_NAME,TABLESPACE_NAME,SUM(BYTES)/1024/1024 M
2 FROM DBA_SEGMENTS
3 WHERE SEGMENT_TYPE='ROLLBACK'
4 GROUP BY OWNER,SEGMENT_NAME,TABLESPACE_NAME
5 /
OWNER SEGMENT_NAME TABLESPACE_NAME M
-------------------- -------------------- -------------------- ---------
SYS RB1 ROLLBACK_DATA .09765625
SYS RB10 ROLLBACK_DATA .09765625
SYS RB11 ROLLBACK_DATA .09765625
SYS RB12 ROLLBACK_DATA .09765625
SYS RB13 ROLLBACK_DATA .09765625
SYS RB14 ROLLBACK_DATA .09765625
SYS RB15 ROLLBACK_DATA .09765625
SYS RB16 ROLLBACK_DATA .09765625
SYS RB2 ROLLBACK_DATA .09765625
SYS RB3 ROLLBACK_DATA .09765625
SYS RB4 ROLLBACK_DATA .09765625
SYS RB5 ROLLBACK_DATA .09765625
SYS RB6 ROLLBACK_DATA .09765625
SYS RB7 ROLLBACK_DATA .09765625
SYS RB8 ROLLBACK_DATA .09765625
SYS RB9 ROLLBACK_DATA .09765625
SYS RB_TEMP SYSTEM .24414063
SYS SYSTEM SYSTEM .1953125
查詢到18記錄.
SQL> SELECT SEGMENT_NAME,OWNER,
2 TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS
3 FROM DBA_ROLLBACK_SEGS
4 /
SEGMENT_NAME OWNER TABLESPACE_NAME SEGMENT_ID FILE_ID STATUS
-------------------- -------------------- -------------------- ---------- --------- ----------
SYSTEM SYS SYSTEM 0 1 ONLINE
RB_TEMP SYS SYSTEM 1 1 OFFLINE
RB1 PUBLIC ROLLBACK_DATA 2 3 ONLINE
RB2 PUBLIC ROLLBACK_DATA 3 3 ONLINE
RB3 PUBLIC ROLLBACK_DATA 4 3 ONLINE
RB4 PUBLIC ROLLBACK_DATA 5 3 ONLINE
RB5 PUBLIC ROLLBACK_DATA 6 3 ONLINE
RB6 PUBLIC ROLLBACK_DATA 7 3 OFFLINE
RB7 PUBLIC ROLLBACK_DATA 8 3 OFFLINE
RB8 PUBLIC ROLLBACK_DATA 9 3 OFFLINE
RB9 PUBLIC ROLLBACK_DATA 10 3 OFFLINE
RB10 PUBLIC ROLLBACK_DATA 11 3 OFFLINE
RB11 PUBLIC ROLLBACK_DATA 12 3 OFFLINE
RB12 PUBLIC ROLLBACK_DATA 13 3 OFFLINE
RB13 PUBLIC ROLLBACK_DATA 14 3 OFFLINE
RB14 PUBLIC ROLLBACK_DATA 15 3 OFFLINE
RB15 PUBLIC ROLLBACK_DATA 16 3 OFFLINE
RB16 PUBLIC ROLLBACK_DATA 17 3 OFFLINE
查詢到18記錄.
2、修改代碼以下,可把如下代碼存入一.sql 文件,如cg_sys.sql,而後以SQL> @cg_sys.sql調用執行。
--注意:各個硬盤上要事先建好oradata 目錄
--修改現有回滾段,使之失效,下線
alter rollback segment rb1 offline;
alter rollback segment rb2 offline;
alter rollback segment rb3 offline;
alter rollback segment rb4 offline;
alter rollback segment rb5 offline;
alter rollback segment rb6 offline;
alter rollback segment rb7 offline;
alter rollback segment rb8 offline;
alter rollback segment rb9 offline;
alter rollback segment rb10 offline;
alter rollback segment rb11 offline;
alter rollback segment rb12 offline;
alter rollback segment rb13 offline;
alter rollback segment rb14 offline;
alter rollback segment rb15 offline;
alter rollback segment rb16 offline;
--刪除原有回滾段
drop rollback segment rb1;
drop rollback segment rb2;
drop rollback segment rb3;
drop rollback segment rb4;
drop rollback segment rb5;
drop rollback segment rb6;
drop rollback segment rb7;
drop rollback segment rb8;
drop rollback segment rb9;
drop rollback segment rb10;
drop rollback segment rb11;
drop rollback segment rb12;
drop rollback segment rb13;
drop rollback segment rb14;
drop rollback segment rb15;
drop rollback segment rb16;
--建數據表空間1
--收款、庫存、定貨、遠程通訊
create tablespace USER_DATA1 datafile
'd:\oradata\user1_1.ora' size 512M,
'd:\oradata\user1_2.ora' size 512M,
'd:\oradata\user1_3.ora' size 512M,
'd:\oradata\user1_4.ora' size 512M,
'd:\oradata\user1_5.ora' size 512M,
'd:\oradata\user1_6.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
--initial 128K,由於,用戶建在表空間上,而表建在用戶裏,爲用戶所擁有,
--用戶繼承數據表空間的存儲參數,表繼承用戶的存儲參數
--若是initial 設的過大,如:5M,則每建一個空表就要佔用5M 的空間,即便一條記錄也沒有
--AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED,設置數據文件自動擴展,每一次擴展增長5M,最大空間
不受限
--建數據表空間2
--物價、人事、結算、財務、總經理、合同、統計
create tablespace USER_DATA2 datafile
'e:\oradata\user2_1.ora' size 512M,
'e:\oradata\user2_2.ora' size 512M,
'e:\oradata\user2_3.ora' size 512M,
'e:\oradata\user2_4.ora' size 512M,
'e:\oradata\user2_5.ora' size 512M,
'e:\oradata\user2_6.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
--建索引表空間1
create tablespace INDEX_DATA1 datafile
'f:\oradata\index1_1.ora' size 512M,
'f:\oradata\index1_2.ora' size 512M,
'f:\oradata\index1_3.ora' size 512M,
'f:\oradata\index1_4.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
--建索引表空間2
create tablespace INDEX_DATA2 datafile
'g:\oradata\index2_1.ora' size 512M,
'g:\oradata\index2_2.ora' size 512M,
'g:\oradata\index2_3.ora' size 512M,
'g:\oradata\index2_4.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 128K next 2M pctincrease 0);
--建回滾表空間1
--設置初始值40M(initial 40M),則每在這個表空間中建一個回滾段,
--此回滾段自動繼承此回滾表空間的存儲參數,也即默認文件爲40M
create tablespace ROLLBACK_DATA1 datafile
'd:\oradata\roll1_1.ora' size 512M,
'd:\oradata\roll1_2.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 40M next 5M pctincrease 0);
--建回滾表空間2
create tablespace ROLLBACK_DATA2 datafile
'e:\oradata\roll2_1.ora' size 512M,
'e:\oradata\roll2_2.ora' size 512M
AUTOEXTEND ON NEXT 5M MAXSIZE UNLIMITED
default storage (initial 40M next 5M pctincrease 0);
--建臨時表空間1
create tablespace TEMPORARY_DATA1 datafile
'f:\oradata\temp1_1.ora' size 512M
default storage (initial 10M next 3M pctincrease 0);
--建臨時表空間2
create tablespace TEMPORARY_DATA2 datafile
'g:\oradata\temp2_1.ora' size 512M
default storage (initial 10M next 3M pctincrease 0);
--使其真正成爲臨時的
alter tablespace TEMPORARY_DATA1 temporary;
alter tablespace TEMPORARY_DATA2 temporary;
--創建新的回滾段,每一個都同樣大,不一樣大小的回滾段沒有什麼意義,系統是隨機選擇的。
--建多少個,根據併發訪問用戶的多少,
--若是大家公司天天有50-100 我的員使用Oracle系統開發的管理軟件,應該20 個以上
create public rollback segment rb01 tablespace rollback_data1;
create public rollback segment rb02 tablespace rollback_data1;
create public rollback segment rb03 tablespace rollback_data1;
create public rollback segment rb04 tablespace rollback_data1;
create public rollback segment rb05 tablespace rollback_data1;
create public rollback segment rb06 tablespace rollback_data1;
create public rollback segment rb07 tablespace rollback_data1;
create public rollback segment rb08 tablespace rollback_data1;
create public rollback segment rb09 tablespace rollback_data2;
create public rollback segment rb10 tablespace rollback_data2;
--前8 個建在回滾表空間1 中,後8 個在回滾表空間2
create public rollback segment rb11 tablespace rollback_data2;
create public rollback segment rb12 tablespace rollback_data2;
create public rollback segment rb13 tablespace rollback_data2;
create public rollback segment rb14 tablespace rollback_data2;
create public rollback segment rb15 tablespace rollback_data2;
create public rollback segment rb16 tablespace rollback_data2;
create public rollback segment rb17 tablespace rollback_data2;
create public rollback segment rb18 tablespace rollback_data2;
create public rollback segment rb19 tablespace rollback_data2;
create public rollback segment rb20 tablespace rollback_data2;
--使回滾段online,即有效
alter rollback segment rb01 online;
alter rollback segment rb02 online;
alter rollback segment rb03 online;
alter rollback segment rb04 online;
alter rollback segment rb05 online;
alter rollback segment rb06 online;
alter rollback segment rb07 online;
alter rollback segment rb08 online;
alter rollback segment rb09 online;
alter rollback segment rb10 online;
alter rollback segment rb11 online;
alter rollback segment rb12 online;
alter rollback segment rb13 online;
alter rollback segment rb14 online;
alter rollback segment rb15 online;
alter rollback segment rb16 online;
alter rollback segment rb17 online;
alter rollback segment rb18 online;
alter rollback segment rb19 online;
alter rollback segment rb20 online;
--查看現有回滾段及其狀態
col segment format a30
SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;
--查看數據文件及其所在表空間、大小、狀態
col file_name format a40
col tablespace_name format a20
select file_name,file_id,tablespace_name,bytes,status from dba_data_files;
至此,表空間從新規劃完畢,這裏講的比較通俗,還有好多參數值得設置,可以把Oracle 設置到最優的
境界,
表空間設置完了,下面,就該好好的整理一下Oracle 的內存區了,
Oracle 頗有意思,內存越大,效果越明顯,因此有必要好好調整一下SGA 區,也就是主要配置ininorcl.ora
參數文件。
查看回滾段名稱及大小
COLUMN roll_name FORMAT a13 HEADING 'Rollback Name'
COLUMN tablespace FORMAT a11 HEADING 'Tablspace'
COLUMN in_extents FORMAT a20 HEADING 'Init/Next Extents'
COLUMN m_extents FORMAT a10 HEADING 'Min/Max Extents'
COLUMN status FORMAT a8 HEADING 'Status'
COLUMN wraps FORMAT 999 HEADING 'Wraps'
COLUMN shrinks FORMAT 999 HEADING 'Shrinks'
COLUMN opt FORMAT 999,999,999 HEADING 'Opt. Size'
COLUMN bytes FORMAT 999,999,999 HEADING 'Bytes'
COLUMN extents FORMAT 999 HEADING 'Extents'
SELECT
a.owner || '.' || a.segment_name roll_name
, a.tablespace_name tablespace
, TO_CHAR(a.initial_extent) || ' / ' ||
TO_CHAR(a.next_extent) in_extents
, TO_CHAR(a.min_extents) || ' / ' ||
TO_CHAR(a.max_extents) m_extents
, a.status status
, b.bytes bytes
, b.extents extents
, d.shrinks shrinks
, d.wraps wraps
, d.optsize opt
FROM
dba_rollback_segs a
, dba_segments b
, v$rollname c
, v$rollstat d
WHERE
a.segment_name = b.segment_name
AND a.segment_name = c.name (+)
AND c.usn = d.usn (+)
ORDER BY a.segment_name;
PL/SQL 入門教程
1.1 PL/SQL 簡介
PL/SQL是ORACLE的過程化語言,包括一整套的數據類型、條件結構、循環結構和異常處理結構,PL/SQL
能夠執行SQL 語句,SQL 語句中也可使用PL/SQL 函數。
1.2 建立PL/SQL 程序塊
DECLARE
…
BEGIN
…
EXCEPTION
END;
1.3 PL/SQL 數據類型
名稱
類型
說明
NUMBER
數字型
能存放整數值和實數值,而且能夠定義精度和取值範圍
BINARY_INTEGER
數字型
可存儲帶符號整數,爲整數計算優化性能
DEC
數字型
NUMBER 的子類型,小數
DOUBLE PRECISION
數字型
NUMBER 的子類型,高精度實數
INTEGER
數字型
NUMBER 的子類型,整數
INT
數字型
NUMBER 的子類型,整數
NUMERIC
數字型
NUMBER 的子類型,與NUMBER 等價
REAL
數字型
NUMBER 的子類型,與NUMBER 等價
SMALLINT
數字型
NUMBER 的子類型,取值範圍比INTEGER 小
VARCHAR2
字符型
存放可變長字符串,有最大長度
CHAR
字符型
定長字符串
LONG
字符型
變長字符串,最大長度可達32,767
DATE
日期型
以數據庫相同的格式存放日期值
BOOLEAN
布爾型
TRUE OR FALSE
ROWID
ROWID
存放數據庫的行號
例_____子:
DECLARE
ORDER_NO NUMBER(3);
CUST_NAME VARCHAR2(20);
ORDER_DATE DATE;
EMP_NO INTEGER:=25;
PI CONSTANT NUMBER:=3.1416;
BEGIN
NULL;
END;
1.4 處理PL/SQL 的異常
1.4.1 PL/SQL 的異常
例如:
DECLARE
X NUMBER;
BEGIN
X:= 'yyyy';--Error Here
EXCEPTION WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED');
END;
實現技術:
EXCEPTION WHEN first_exception THEN
…
WHEN second_exception THEN
…
WHEN OTHERS THEN
/*THERS 異常處理器必須排在最後,它處理全部沒有明確列出的異常。*/
…
END;
1.4.2 預約義異常
異常名稱
ORACLE 錯誤
說明
CURSOR_ALREADY_OPEN
ORA-6511
試圖打開一個已打開的光標
DUP_VAL_ON_INDEX
ORA-0001
試圖破壞一個惟一性限制
INVALID_CURSOR
ORA-1001
試圖使用一個無效的光標
INVALID_NUMBER
ORA-1722
試圖對非數字值進行數字操做
LOGIN_DENIED
ORA-1017
無效的用戶名或者口令
NO_DATA_FOUND
ORA-1403
查詢未找到數據
NOT_LOGGED_ON
ORA-1012
還未鏈接就試圖數據庫操做
PROGRAM_ERROR
ORA-6501
內部錯誤
ROWTYPE_MISMATCH
ORA-6504
主變量和光標的類型不兼容
STORAGE_ERROR
ORA-6500
內部錯誤
TIMEOUT_ON_RESOURCE
ORA-0051
發生超時
TOO_MANY_ROWS
ORA-1422
SELECT INTD 命令返回的多行
TRANSACTION_BACKED_OUT
ORA-006
因爲死鎖提交被退回
VALUE_ERROR
ORA-6502
轉換或者裁剪錯誤
ZERO_DIVIDE
ORA-1476
試圖被零除
1.4.3 自定義異常處理
DECLARE
BAD_ROWID EXCEPTION;
X ROWID;
PRAGMA EXCEPTION_INIT(BAD_ROWID,-01445);
BEGIN
SELECT ROWID INTO X FROM TAB
WHERE ROWNUM=1;
EXCEPTION WHEN BAD_ROWID THEN
DBMS_OUTPUT.PUT_LINE('CANNOT QUERY ROWID FROM THIS VIEW');
END;
注意:-01445 由於PRAGMA EXCEPTION_INIT 命令把這個變量(-01455)鏈接到
這個ORACLE 錯誤,該語句的語法以下:
PRAGMA EXCEPTION_INIT(exception_name, error_number);
其中error_number 是負數,由於錯誤號被認爲負數,當定義錯誤時記住使用負號
1.4.4 自定義異常
異常不必定必須是oracle 返回的系統錯誤,用戶能夠在本身的應用程序中創
建可觸發及可處理的自定義異常
DECLARE
SALARY_CODE VARCHAR2(1);
INVALID_SALARY_CODE EXCEPTION;
BEGIN
SALARY_CODE:='X';
IF SALARY_CODE NOT IN('A', 'B', 'C') THEN
RAISE INVALID_SALARY_CODE;
END IF;
EXCEPTION WHEN INVALID_SALARY_CODE THEN
DBMS_OUTPUT.PUT_LINE('INVALID SALARY CODE');
END;
1.5 在PL/SQL 中單條記錄的查詢
在PL/SQL內,有時在沒有定義顯式光標的狀況下須要查詢單條記錄,並把記錄的數據賦給變量。
DECLARE
ln_dno NUMBER;
lvs_dname VARCHAR2(40);
BEGIN
SELECT DEPT_NO,DEPT_NAME
INTO ln_dno,lvs_dname
FROM dept
WHERE DEPT_NO=1;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(ln_dno)||'.'||lvs_dname);
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO DATA_FOUND');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
END;
1.6 用光標查詢多條記錄
光標(CURSOR)是指向一個稱爲上下文相關區的區域的指針,這個區域在服務器的處理過程全局區
(PGA)內,當服務器上執行了一個查詢後,查詢返回的記錄集存放在上下文相關區,經過光標上的操做
能夠把這些記錄檢索到客戶端的應用程序。
1.6.1 使用光標的基本方法
DECLARE
CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS
WHERE ROWNUM<=10
ORDER BY VIEW_NAME;
VNAME VARCHAR2(40);
BEGIN
OPEN C1;
FETCH C1 INTO VNAME;
WHILE C1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME);
FETCH C1 INTO VNAME;
END LOOP;
END;
屬性
含量
%FOUND
布爾型屬性,當最近一次該記錄時成功返回,則值爲TRUE
%NOTFOUND
布爾型屬性,它的值總與%FOUND 屬性的值相反
%ISOPEN
布爾型屬_____性,當光標是打開時返回TRUE
%ROWCOUNT
數字型屬性,返回已從光標中讀取的記錄數
1.6.2 使用光標FOR 循環
DECLARE
CURSOR C1 IS
SELECT VIEW_NAME
FROM ALL_VIEWS
WHERE ROWNUM<=10
ORDER BY VIEW_NAME;
BEGIN
FOR I IN C1 LOOP
DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
END LOOP;
END LOOP;
EXCEPTION WHEN OTHERS THEN
NULL;
END;
1.6.3 帶參數的光標
DECLARE
CURSOR C1(VIEW_PATTERN VARCHAR2) IS
SELECT VIEW_NAME
FROM ALL_VIEWS
WHERE VIEW_NAME LIKE VIEW_PATTERN||'%' AND
ROWNUM<=10
ORDER BY VIEW_NAME;
VNAME VARCHAR2(40);
BEGIN
FOR I IN C1('USER_AR') LOOP
DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
END LOOP;
DBMS_OUTPUT.PUT_LINE( );
FOR I IN C1('USER') LOOP
DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME);
END LOOP;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('AAA');
END;
1.7 建立表明數據庫記錄和列的變量
變量名基表名.列名%TYPE
DECLARE
D_NO DEPT.DEPT_NO%TYPE;
D_NAME DEPT.DEPT_NAME%TYPE;
BEGIN
SELECT DEPT_NO,DEPT_NAME INTO D_NO,D_NAME
FROM DEPT;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(D_NO));
EXCEPTION WHEN NO_DATA_FOUND THEN
NULL;
END;
變量名基表名%ROWTYPE
DECLARE
D VEQU12%ROWTYPE;
BEGIN
SELECT ASSET12ID,ASSET12NAME
INTO D.ASSET12ID, D.ASSET12NAME
FROM VEQU12;
DBMS_OUTPUT.PUT_LINE(D.ASSET12ID);
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS');
END;
說明:
當用戶要建立一個變量來表示一個基表列或者要建立多個變量來表明一整條記錄時,能夠實際使用
%TYPE 屬性和%ROWTYPE 屬性,使用%TYPE 屬性和%ROWTYPE 屬性能夠保證當基表的結構或者其中某列的數據
類型改變了時,用戶的PL/SQL 代碼仍可正常工做。
1.9 怎樣用PL/SQL 表實現數組功能
PL/SQL 表與其餘過程化語言(如C 語言)的一維數組相似。實現PL/SQL 表須要建立一個數據類型並另
外進行變量說明。
Type <類型名> Is
Table Of <數據類型>
Index by Binary_Integer;
如下爲一個例子:
Declare
Type Array_type is
Table Of Number
Index by Binary_Integer;
My_Array Array_type;
Begin
For I In 1..10 Loop
My_Array(I) := I*2;
End Loop;
For I In 1..10 Loop
Dbms_Output.Put_line(To_char(My_Array(I)));
End Loop;
End;
在from 後面使用變量
CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR2 ,
I_Owner IN VARCHAR2 DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_CursorId INTEGER ;
V_SqlStr VARCHAR2(300) ;
BEGIN
V_CursorId := DBMS_SQL.OPEN_CURSOR ;
IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner , '' ) ) ) ) = 0 THEN
V_SqlStr := 'SELECT COUNT(*) FROM ' || I_TabNa ;
ELSE
V_SqlStr := 'SELECT COUNT(*) FROM ' || I_Owner|| '.' || I_TabNa ;
END IF ;
DBMS_SQL.PARSE( V_CursorId , V_SqlStr , DBMS_SQL.V7 ) ;
DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 0 ) ;
IF DBMS_SQL.EXECUTE( V_CursorId ) = 0 THEN
NULL ;
END IF ;
IF DBMS_SQL.FETCH_ROWS( V_CursorId ) = 0 THEN
RETURN 0 ;
END IF ;
DBMS_SQL.COLUMN_VALUE( V_CursorId , 1 , V_RtnVal ) ;
DBMS_SQL.CLOSE_CURSOR( V_CursorId ) ;
RETURN V_RtnVal ;
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR( V_CursorId ) ;
-- DBMS_OUTPUT.PUT_LINE( V_SqlStr || SQLERRM ) ;
RETURN 0 ;
END GET_TABLE_COUNT;
試驗結果:
SQL> select GET_TABLE_COUNT( 'tab' ) from dual ;
GET_TABLE_COUNT('TAB')
----------------------
22
SQL> select GET_TABLE_COUNT( 'spr' , 'testman') from dual ;
GET_TABLE_COUNT('SPR','TESTMAN
------------------------------
15
SQL> select GET_TABLE_COUNT( 'U_Oausr' , 'tm') from dual ;
GET_TABLE_COUNT('U_OAUSR','TM'
------------------------------
10
SQL>
說明:
-- DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 0 ) ; 裏的「0」是什麼意思?
DEFINE_COLUMN 是用做定義數據類型的,不一樣的數據類型有不太的定義方式,這裏面的「0」通俗點說就是
「與‘0’同樣的數據類型的意思」,好比定義長度爲200 的varchar2 型的列的時候,能夠簡化爲這樣定
義:DBMS_SQL.DEFINE_COLUMN( V_CursorId , 1 , 'tmpStr' , 200 ),更多的數據類型列的定義請查看
oracle 的pl/sql 文檔,裏面很全。
-- 另外,怎麼用聯編變量?
聯編變量是一種很是好的傳遞參數的方式,並且不容易出錯。可是既然稱之爲「聯編變量」那就是它只能
對Oracle 中認爲的變量進行聯編,而剛纔上面的例子中,表面是不可以做爲變量的,所以不能夠聯編,
Oracle 中認爲出如今邏輯表達式右邊的纔是變量,例如能夠這樣進行_____聯編變量:
......
V_SqlStr := 'SELECT COUNT(*) FROM TAB WHERE TName LIKE :I_Arg0 ' ;
DBMS_SQL.PARSE( V_CursorId , V_SqlStr , DBMS_SQL.V7 ) ;
V_TabName := 'MYTAB' ;
DBMS_SQL.BIND_VARIABLE( V_CursorId , ':I_Arg0' , V_TabName || '%' ) ;
......
8i 之後的版本這樣寫也行
CREATE OR REPLACE FUNCTION GET_TABLE_COUNT(
I_TabNa IN VARCHAR2 ,
I_Owner IN VARCHAR2 DEFAULT NULL
)
RETURN NUMBER
IS
V_RtnVal NUMBER ;
V_TabName VARCHAR2(300) ;
BEGIN
IF LENGTHB( RTRIM( LTRIM( NVL( I_Owner , '' ) ) ) ) = 0 THEN
V_TabName := I_TabNa ;
ELSE
V_TabName := I_Owner|| '.' || I_TabNa ;
END IF ;
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || V_TabName INTO V_RtnVal ;
RETURN V_RtnVal ;
EXCEPTION
WHEN OTHERS THEN
RETURN 0 ;
END GET_TABLE_COUNT ;
Oracle 經常使用數據字典
視圖名描述
ALL_CATALOG All tables, views, synonyms, sequences accessible to the user
ALL_COL_COMMENTS Comments on columns of accessible tables and views
ALL_COL_GRANTS_MADE Grants on columns for which the user is owner or grantor
ALL_COL_GRANTS_RECD Grants on columns for which the user or PUBLIC is the grantee
ALL_COL_PRIVS Grants on columns for which the user is the grantor, grantee, owner, or
an enabled role or PUBLIC is the grantee
ALL_COL_PRIVS_MADE Grants on columns for which the user is owner or grantor
ALL_COL_PRIVS_RECD Grants on columns for which the user, PUBLIC or enabled role is the
grantee
ALL_CONSTRAINTS Constraint definitions on accessible tables
ALL_CONS_COLUMNS Information about accessible columns in constraint definitions
ALL_DB_LINKS Database links accessible to the user
ALL_DEF_AUDIT_OPTS Auditing options for newly created objects
ALL_DEPENDENCIES Dependencies to and from objects accessible to the user
ALL_ERRORS Current errors on stored objects that user is allowed to create
ALL_INDEXES Descriptions of indexes on tables accessible to the user
ALL_IND_COLUMNS COLUMNs comprising INDEXes on accessible TABLES
ALL_OBJECTS Objects accessible to the user
ALL_REFRESH All the refresh groups that the user can touch
ALL_REFRESH_CHILDREN All the objects in refresh groups, where the user can touch the group
ALL_SEQUENCES Description of SEQUENCEs accessible to the user
ALL_SNAPSHOTS Snapshots the user can look at
ALL_SOURCE Current source on stored objects that user is allowed to create
ALL_SYNONYMS All synonyms accessible to the user
ALL_TABLES Description of tables accessible to the user
ALL_TAB_COLUMNS Columns of all tables, views and clusters
ALL_TAB_COMMENTS Comments on tables and views accessible to the user
ALL_TAB_GRANTS_MADE User's grants and grants on user's objects
ALL_TAB_GRANTS_RECD Grants on objects for which the user or PUBLIC is the grantee
ALL_TAB_PRIVS Grants on objects for which the user is the grantor, grantee, owner, or
an enabled role or PUBLIC is the grantee
ALL_TAB_PRIVS_MADE User's grants and grants on user's objects
ALL_TAB_PRIVS_RECD Grants on objects for which the user, PUBLIC or enabled role is the grantee
ALL_TRIGGERS Triggers accessible to the current user
ALL_TRIGGER_COLS Column usage in user's triggers or in triggers on user's tables
ALL_USERS Information about all users of the database
ALL_VIEWS Text of views accessible to the user
USER_AUDIT_CONNECT Audit trail entries for user logons/logoffs
USER_AUDIT_OBJECT Audit trail records for statements concerning objects, specifically: table,
cluster, view, index, sequence, [public] database link, [public] synonym, procedure, trigger,
rollback segment, tablespace, role, user
USER_AUDIT_STATEMENT Audit trail records concerning grant, revoke, audit, noaudit and alter
system
USER_AUDIT_TRAIL Audit trail entries relevant to the user
USER_CATALOG Tables, Views, Synonyms and Sequences owned by the user
USER_CLUSTERS Descriptions of user's own clusters
USER_CLU_COLUMNS Mapping of table columns to cluster columns
USER_COL_COMMENTS Comments on columns of user's tables and views
USER_COL_GRANTS Grants on columns for which the user is the owner, grantor or grantee
USER_COL_GRANTS_MADE All grants on columns of objects owned by the user
USER_COL_GRANTS_RECD Grants on columns for which the user is the grantee
USER_COL_PRIVS Grants on columns for which the user is the owner, grantor or grantee
USER_COL_PRIVS_MADE All grants on columns of objects owned by the user
USER_COL_PRIVS_RECD Grants on columns for which the user is the grantee
USER_CONSTRAINTS Constraint definitions on user's own tables
USER_CONS_COLUMNS Information about accessible columns in constraint definitions
USER_CROSS_REFS Cross references for user's views and synonyms
USER_DB_LINKS Database links owned by the user
USER_DEPENDENCIES Dependencies to and from a users objects
USER_ERRORS Current errors on stored objects owned by the user
USER_EXTENTS Extents comprising segments owned by the user
USER_FREE_SPACE Free extents in tablespaces accessible to the user
USER_INDEXES Description of the user's own indexes
USER_IND_COLUMNS COLUMNs comprising user's INDEXes or on user's TABLES
USER_JOBS All jobs owned by this user
USER_OBJECTS Objects owned by the user
USER_OBJECT_SIZE Sizes, in bytes, of various pl/sql objects
USER_OBJ_AUDIT_OPTS Auditing options for user's own tables and views
USER_REFRESH All the refresh groups
USER_REFRESH_CHILDREN All the objects in refresh groups, where the user owns the refresh group
USER_RESOURCE_LIMITS Display resource limit of the user
USER_ROLE_PRIVS Roles granted to current user
USER_SEGMENTS Storage allocated for all database segments
USER_SEQUENCES Description of the user's own SEQUENCEs
USER_SNAPSHOTS Snapshots the user can look at
USER_SNAPSHOT_LOGS All snapshot logs owned by the user
USER_SOURCE Source of stored objects accessible to the user
USER_SYNONYMS The user's private synonyms
USER_SYS_PRIVS System privileges granted to current user
USER_TABLES Description of the user's own tables
USER_TABLESPACES Description of accessible tablespaces
USER_TAB_AUDIT_OPTS Auditing options for user's own tables and views
USER_TAB_COLUMNS Columns of user's tables, views and clusters
USER_TAB_COMMENTS Comments on the tables and views owned by the user
USER_TAB_GRANTS Grants on objects for which the user is the owner, grantor or grantee
USER_TAB_GRANTS_MADE All grants on objects owned by the user
USER_TAB_GRANTS_RECD Grants on objects for which the user is the grantee
USER_TAB_PRIVS Grants on objects for which the user is the owner, grantor or grantee
USER_TAB_PRIVS_MADE All grants on objects owned by the user
USER_TAB_PRIVS_RECD Grants on objects for which the user is the grantee
USER_TRIGGERS Triggers owned by the user
USER_TRIGGER_COLS Column usage in user's triggers
USER_TS_QUOTAS Tablespace quotas for the user
USER_USERS Information about the current user
USER_VIEWS Text of views owned by the user
AUDIT_ACTIONS Description table for audit trail action type codes. Maps action type
numbers to action type names
COLUMN_PRIVILEGES Grants on columns for which the user is the grantor, grantee, owner, or
an enabled role or PUBLIC is the grantee
DICTIONARY Description of data dictionary tables and views
DICT_COLUMNS Description of columns in data dictionary tables and views
GLOBAL_NAME global database name
INDEX_HISTOGRAM statistics on keys with repeat count
INDEX_STATS statistics on the b-tree
RESOURCE_COST Cost for each resource
ROLE_ROLE_PRIVS Roles which are granted to roles
ROLE_SYS_PRIVS System privileges granted to roles
ROLE_TAB_PRIVS Table privileges granted to roles
SESSION_PRIVS Privileges which the user currently has set
SESSION_ROLES Roles which the user currently has enabled.
TABLE_PRIVILEGES Grants on objects for which the user is the grantor, grantee, owner, or
an enabled role or PUBLIC is the grantee
ACCESSIBLE_COLUMNS Synonym for ALL_TAB_COLUMNS
ALL_COL_GRANTS Synonym for COLUMN_PRIVILEGES
ALL_JOBS Synonym for USER_JOBS
ALL_TAB_GRANTS Synonym for TABLE_PRIVILEGES
CAT Synonym for USER_CATALOG
CLU Synonym for USER_CLUSTERS
COLS Synonym for USER_TAB_COLUMNS
DBA_AUDIT_CONNECT Synonym for USER_AUDIT_CONNECT
DBA_AUDIT_RESOURCE Synonym for USER_AUDIT_RESOURCE
DBA_REFRESH_CHILDREN Synonym for USER_REFRESH_CHILDREN
DICT Synonym for DICTIONARY
IND Synonym for USER_INDEXES
OBJ Synonym for USER_OBJECTS
SEQ Synonym for USER_SEQUENCES
SM$VERSION Synonym for SM_$VERSION
SYN Synonym for USER_SYNONYMS
TABS Synonym for USER_TABLES
V$ACCESS Synonym for V_$ACCESS
V$ARCHIVE Synonym for V_$ARCHIVE
V$BACKUP Synonym for V_$BACKUP
V$BGPROCESS Synonym for V_$BGPROCESS
V$CIRCUIT Synonym for V_$CIRCUIT
V$COMPATIBILITY Synonym for V_$COMPATIBILITY
V$COMPATSEG Synonym for V_$COMPATSEG
V$CONTROLFILE Synonym for V_$CONTROLFILE
V$DATABASE Synonym for V_$DATABASE
V$DATAFILE Synonym for V_$DATAFILE
V$DBFILE Synonym for V_$DBFILE
V$DBLINK Synonym for V_$DBLINK
V$DB_OBJECT_CACHE Synonym for V_$DB_OBJECT_CACHE
V$DISPATCHER Synonym for V_$DISPATCHER
V$ENABLEDPRIVS Synonym for V_$ENABLEDPRIVS
V$FILESTAT Synonym for V_$FILESTAT
V$FIXED_TABLE Synonym for V_$FIXED_TABLE
V$LATCH Synonym for V_$LATCH
V$LATCHHOLDER Synonym for V_$LATCHHOLDER
V$LATCHNAME Synonym for V_$LATCHNAME
V$LIBRARYCACHE Synonym for V_$LIBRARYCACHE
V$LICENSE Synonym for V_$LICENSE
V$LOADCSTAT Synonym for V_$LOADCSTAT
V$LOADTSTAT Synonym for V_$LOADTSTAT
V$LOCK Synonym for V_$LOCK
V$LOG Synonym for V_$LOG
V$LOGFILE Synonym for V_$LOGFILE
V$LOGHIST Synonym for V_$LOGHIST
V$LOG_HISTORY Synonym for V_$LOG_HISTORY
V$MLS_PARAMETERS Synonym for V_$MLS_PARAMETERS
V$MTS Synonym for V_$MTS
V$NLS_PARAMETERS Synonym for V_$NLS_PARAMETERS
V$NLS_VALID_VALUES Synonym for V_$NLS_VALID_VALUES
V$OPEN_CURSOR Synonym for V_$OPEN_CURSOR
V$OPTION Synonym for V_$OPTION
V$PARAMETER Synonym for V_$PARAMETER
V$PQ_SESSTAT Synonym for V_$PQ_SESSTAT
V$PQ_SLAVE Synonym for V_$PQ_SLAVE
V$PQ_SYSSTAT Synonym for V_$PQ_SYSSTAT
V$PROCESS Synonym for V_$PROCESS
V$QUEUE Synonym for V_$QUEUE
V$RECOVERY_LOG Synonym for V_$RECOVERY_LOG
V$RECOVER_FILE Synonym for V_$RECOVER_FILE
V$REQDIST Synonym for V_$REQDIST
V$RESOURCE Synonym for V_$RESOURCE
V$ROLLNAME Synonym for V_$ROLLNAME
V$ROLLSTAT Synonym for V_$ROLLSTAT
V$ROWCACHE Synonym for V_$ROWCACHE
V$SESSION Synonym for V_$SESSION
V$SESSION_CURSOR_CACHE Synonym for V_$SESSION_CURSOR_CACHE
V$SESSION_EVENT Synonym for V_$SESSION_EVENT
V$SESSION_WAIT Synonym for V_$SESSION_WAIT
V$SESSTAT Synonym for V_$SESSTAT
V$SESS_IO Synonym for V_$SESS_IO
V$SGA Synonym for V_$SGA
V$SGASTAT Synonym for V_$SGASTAT
V$SHARED_SERVER Synonym for V_$SHARED_SERVER
V$SQLAREA Synonym for V_$SQLAREA
V$STATNAME Synonym for V_$STATNAME
V$SYSSTAT Synonym for V_$SYSSTAT
V$SYSTEM_CURSOR_CACHE Synonym for V_$SYSTEM_CURSOR_CACHE
V$SYSTEM_EVENT Synonym for V_$SYSTEM_EVENT
V$THREAD Synonym for V_$THREAD
V$TIMER Synonym for V_$TIMER
V$TRANSACTION Synonym for V_$TRANSACTION
V$TYPE_SIZE Synonym for V_$TYPE_SIZE
V$VERSION Synonym for V_$VERSION
V$WAITSTAT Synonym for V_$WAITSTAT
V$_LOCK Synonym for V_$_LOCK
在Oracle 中實現數據庫的複製
在Internet 上運做數據庫常常會有這樣的需求:把遍及全國各城市類似的數據庫應用統一塊兒來,一個節
點的數據改變不只體如今本地,還反映到遠端。複製技術給用戶提供了一種快速訪問共享數據的辦法。
1、實現數據庫複製的前提條件
1、數據庫支持高級複製功能
您能夠用system 身份登陸數據庫,查看v$option 視圖,若是其中Advanced replication 爲TRUE,則支
持高級複製功能;不然不支持。
2、數據庫初始化參數要求
①、db_domain = test.com.cn
指明數據庫的域名(默認的是WORLD),這裏能夠用您公司的域名。
②、global_names = true
它要求數據庫連接(database link)和被鏈接的數據庫名稱一致。
如今全局數據庫名:db_name+」.」+db_domain
③、有跟數據庫job 執行有關的參數
job_queue_processes = 1
job_queue_interval = 60
distributed_transactions = 10
open_links = 4
第一行定義SNP 進程的啓動個數爲n。系統缺省值爲0,正常定義範圍爲0~36,根據任務的多少,能夠配
置不一樣的數值。
第二行定義系統每隔N 秒喚醒該進程一次。系統缺省值爲60 秒,正常範圍爲1~3600 秒。事實上,該進
程執行完當前任務後,就進入睡眠狀態,睡眠一段時間後,由系統的總控負責將其喚醒。
若是修改了以上這幾個參數,須要從新啓動數據庫以使參數生效。
2、實現數據庫同步複製的步驟
假設在Internet 上咱們有兩個數據庫:一個叫深圳(shenzhen),一個叫北京(beijing)。
具體配置見下表:
數據庫名 shenzhen beijing
數據庫域名 test.com.cn test.com.cn
數據庫sid 號 shenzhen beijing
Listener 端口號 1521 1521
服務器ip 地址 10.1.1.100 10.1.1.200
1、確認兩臺數據庫之間能夠互相訪問,在tnsnames.ora 裏設置數據庫鏈接字符串。
①、例如:深圳這邊的數據庫鏈接字符串是如下的格式
beijing =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.200)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = beijing)
)
)
運行$tnsping beijing
出現如下提示符:
Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST=10.1.1.200)(PORT=1521))
OK(n 毫秒)
代表深圳數據庫能夠訪問北京數據庫。
②、在北京那邊也一樣配置,確認$tnsping shenzhen 是通的。
2、改數據庫全局名稱,建公共的數據庫連接。
①、用system身份登陸shenzhen 數據庫
SQL>alter database rename global_name to shenzhen.test.com.cn;
用system身份登陸beijing數據庫:
SQL>alter database rename global_name to beijing.test.com.cn;
②、用system身份登陸shenzhen 數據庫
SQL>create public database link beijing.test.com.cn using 'beijing';
測試數據庫全局名稱和公共的數據庫連接
SQL>select * from global_name@beijing.test.com.cn;
返回結果爲beijing.test.com.cn 就對了。
用system身份登陸beijing數據庫:
SQL>create public database link shenzhen.test.com.cn using 'shenzhen';
測試數據庫全局名稱和公共的數據庫連接
SQL>select * from global_name@shenzhen.test.com.cn;
返回結果爲shenzhen.test.com.cn 就對了。
3、創建管理數據庫複製的用戶repadmin,並賦權。
①、用system身份登陸shenzhen 數據庫
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace
temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grant execute any procedure to repadmin;
SQL>execute dbms_repcat_admin.grant_admin_any_repgroup('repadmin');
SQL>grant comment any table to repadmin;
SQL>grant lock any table to repadmin;
②、一樣用system 身份登陸beijing 數據庫,運行以上的命令,管理數據庫複製的用戶repadmin,並賦
權。
說明:repadmin用戶名和密_____碼能夠根據用戶的需求自由命名。
4、在數據庫複製的用戶repadmin 下建立私有的數據庫連接。
①、用repadmin 身份登陸shenzhen 數據庫
SQL>create database link beijing.test.com.cn connect to repadmin identified by repadmin;
測試這個私有的數據庫連接:
SQL>select * from global_name@beijing.test.com.cn;
返回結果爲beijing.test.com.cn 就對了。
②、用repadmin 身份登陸beijing數據庫
SQL>create database link shenzhen.test.com.cn connect to repadmin identified by repadmin;
測試這個私有的數據庫連接
SQL>select * from global_name@shenzhen.test.com.cn;
返回結果爲shenzhen.test.com.cn 就對了。
5、建立或選擇實現數據庫複製的用戶和對象,給用戶賦權,數據庫對象必須有主關鍵字。
假設咱們用ORACLE 裏舉例用的scott 用戶,dept 表。
①、用internal 身份登陸shenzhen 數據庫,建立scott用戶並賦權
SQL>create user scott identified by tiger default tablespace users temporary tablespace temp;
SQL>grant connect, resource to scott;
SQL>grant execute on sys.dbms_defer to scott;
②、用scott 身份登陸shenzhen 數據庫,建立表dept
SQL>create table dept
(deptno number(2) primary key,
dname varchar2(14),
loc varchar2(13) );
③、若是數據庫對象沒有主關鍵字,能夠運行如下SQL 命令添加:
SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno));
④、在shenzhen 數據庫scott 用戶下建立主關鍵字的序列號,範圍避免和beijing 的衝突。
SQL> create sequence dept_no increment by 1 start with 1 maxvalue 44 cycle nocache;
(說明:maxvalue 44 能夠根據應用程序及表結構主關鍵字定義的位數須要而定)
⑤、在shenzhen 數據庫scott 用戶下插入初始化數據
SQL>insert into dept values (dept_no.nextval,'accounting','new york');
SQL>insert into dept values (dept_no.nextval,'research','dallas');
SQL>commit;
⑥、在beijing 數據庫那邊一樣運行以上①,②,③
⑦、在beijing 數據庫scott 用戶下建立主關鍵字的序列號,範圍避免和shenzhen 的衝突。
SQL> create sequence dept_no increment by 1 start with 45 maxvalue 99 cycle nocache;
⑧、在beijing 數據庫scott 用戶下插入初始化數據
SQL>insert into dept values (dept_no.nextval,'sales','chicago');
SQL>insert into dept values (dept_no.nextval,'operations','boston');
SQL>commit;
6、建立要複製的組scott_mg,加入數據庫對象,產生對象的複製支持
①、用repadmin 身份登陸shenzhen 數據庫,建立主複製組scott_mg
SQL> execute dbms_repcat.create_master_repgroup('scott_mg');
說明:scott_mg 組名能夠根據用戶的需求自由命名。
②、在複製組scott_mg 里加入數據庫對象
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'dept',
type=>'table',use_existing_object=>true,gname=>'scott_mg');
參數說明:
sname 實現數據庫複製的用戶名稱
oname 實現數據庫複製的數據庫對象名稱
(表名長度在27 個字節內,程序包名長度在24個字節內)
type 實現數據庫複製的數據庫對象類別
(支持的類別:表,索引,同義詞,觸發器,視圖,過程,函數,程序包,程序包體)
use_existing_object true 表示用主複製節點已經存在的數據庫對象
gname 主複製組名
③、對數據庫對象產生複製支持
SQL>execute dbms_repcat.generate_replication_support('scott','dept','table');
(說明:產生支持scott 用戶下dept 表複製的數據庫觸發器和程序包)
④、確認複製的組和對象已經加入數據庫的數據字典
SQL>select gname, master, status from dba_repgroup;
SQL>select * from dba_repobject;
7、建立主複製____節點
①、用repadmin 身份登陸shenzhen 數據庫,建立主複製節點
SQL>execute dbms_repcat.add_master_database
(gname=>'scott_mg',master=>'beijing.test.com.cn',use_existing_objects=>true,
copy_rows=>false, propagation_mode => 'asynchronous');
參數說明:
gname 主複製組名
master 加入主複製節點的另外一個數據庫
use_existing_object true 表示用主複製節點已經存在的數據庫對象
copy_rows false 表示第一次開始複製時不用和主複製節點保持一致
propagation_mode 異步地執行
②、確認複製的任務隊列已經加入數據庫的數據字典
SQL>select * from user_jobs;
8、使同步組的狀態由停頓(quiesced )改成正常(normal)
①、用repadmin 身份登陸shenzhen 數據庫,運行如下命令
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
②、確認同步組的狀態爲正常(normal)
SQL> select gname, master, status from dba_repgroup;
③、若是這個①命令不能使同步組的狀態爲正常(normal),可能有一些停頓的複製,運行如下命令再試試
(建議在緊急的時候才用):
SQL> execute dbms_repcat.resume_master_activity('scott_mg',true);
9、建立複製數據庫的時間表,咱們假設用固定的時間表:10 分鐘複製一次。
①、用repadmin 身份登陸shenzhen 數據庫,運行如下命令
SQL>begin
dbms_defer_sys.schedule_push (
destination => 'beijing.test.com.cn',
interval => 'sysdate + 10/1440',
next_date => sysdate);
end;
/
SQL>begin
dbms_defer_sys.schedule_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
②、用repadmin 身份登陸beijing數據庫,運行如下命令
SQL>begin
dbms_defer_sys.schedule_push (
destination => ' shenzhen.test.com.cn ',
interval => 'sysdate + 10 / 1440',
next_date => sysdate);
end;
/
SQL>begin
dbms_defer_sys.schedule_purge (
next_date => sysdate,
interval => 'sysdate + 10/1440',
delay_seconds => 0,
rollback_segment => '');
end;
/
10、添加或修改兩邊數據庫的記錄,跟蹤複製過程
若是你想馬上看到添加或修改後數據庫的記錄的變化,能夠在兩邊repadmin 用戶下找到push 的
job_number,而後運行:
SQL>exec dbms_job.run(job_number);
3、異常狀況的處理
1、檢查複製工做正常否,能夠在repadmin 用戶下查詢user_jobs
SQL>select job,this_date,next_date,what, broken from user_jobs;
正常的狀態有兩種:
任務閒——this_date 爲空,next_date 爲當前時間後的一個時間值
任務忙——this_date 不爲空,next_date 爲當前時間後的一個時間值
異常狀態也有兩種:
任務死鎖——next_date 爲當前時間前的一個時間值
任務死鎖——next_date 爲很是大的一個時間值,例如:4001-01-01
這可能由於網絡中斷照成的死鎖
解除死鎖的辦法:
$ps –ef|grep orale
找到死鎖的刷新快照的進程號ora_snp*,用kill –9 命令刪除此進程
而後進入repadmin 用戶SQL>操做符下,運行命令:
SQL>exec dbms_job.run(job_number);
說明:job_number 爲用select job,this_date,next_date,what from user_jobs;命令查出的job 編號。
2、增長或減小複製組的複製對象
①、中止主數據庫節點的複製動做,使同步組的狀態由正常(normal)改成停頓(quiesced )
用repadmin 身份登陸shenzhen數據庫,運行如下命令
SQL>execute dbms_repcat.suspend_master_activity (gname => 'scott_mg');
②、在複製組scott_mg 里加入數據庫對象,保證數據庫對象必須有主關鍵字。
SQL>execute dbms_repcat.create_master_repobject(sname=>'scott',oname=>'emp',
type=>'table',use_existing_object=>true,gname=>'scott_mg');
對加入的數據庫對象產生複製支持
SQL>execute dbms_repcat.generate_replication_support('scott','emp','table');
③、在複製組scott_mg 裏刪除數據庫對象。
SQL>execute dbms_repcat.drop_master_repobject ('scott','dept','table');
④、從新使同步組的狀態由停頓(quiesced )改成正常(normal)。
SQL> execute dbms_repcat.resume_master_activity('scott_mg',false);
SQL*PLUS 環境輸入'&字符'的方法
咱們知道在SQL*PLUS默認環境裏會把'&字符'當成變量來處理.
有些時候咱們也須要在SQL>的符號下輸入'&字符', 只須要改變SQL*PLUS 下一個環境變量define 便可.
SQL> set define off;
是把默認的&綁定變量的功能取消, 能夠把'&字符'當成普通字符處理
SQL> set define on;
打開&綁定變量的功能, &後面的字符串當變量使用.
SQL> show define;
查看當前SQL*PLUS 的define狀態
舉例說明:
---------------------------------------------------------------
SQL> CREATE TABLE TEST3 (
ID NUMBER (2) PRIMARY KEY,
NAME VARCHAR2 (20));
SQL> show define;
define "&" (hex 26)
SQL> insert into test3 values(1,'sgs&a&n');
Enter value for a: abc
Enter value for n: 456
old 1: insert into test3 values(1,'sgs&a&n')
new 1: insert into test3 values(1,'sgsabc456')
1 row created.
SQL> commit;
Commit complete.
SQL> set define off;
SQL> insert into test3 values(2,'sgs&a&n');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test3;
ID NAME
-- --------------------
1 sgsabc456
2 sgs&a&n
簡說建立用戶
SQL>create user dbuser identified by oracle default tablespace data temporary tablespace temp
quota unlimited on data quota 0 on system quota 0 on tools quota 0 on users;
SQL>grant connect to dbuser;
SQL>grant create procedure to dbuser; #這些權限足夠用於開發及生產環境
SQL>grant select on dba_pending_transactions to dbuser; #二階段提交過程當中相似Tuxedo
的軟件須要檢索掛起交易的狀態,因此必須獲得對此視圖的select權限,以sys 用戶身份賦予
修改用戶可以使用alter user dbuser ...
參考命令:
drop user dbuser cascade; #刪除用戶及其全部的數據對象
revoke connect from dbuser; #取消用戶角色權限
相關係統表:
user(dba)_users
user(dba)_role_privs 角色權限
user(dba)_sys_privs 系統權限
user(dba)_tab_privs 對其餘用戶表操做的權限
user_ts_quotas 表空間限額
建立只讀用戶
假定數據庫用戶dbbrsr 須要對dbuser的表emp 擁有select 權力
connect dbuser
grant select on emp to dbbrsr
connect dbbrsr
create synonym emp for dbuser.emp;
這樣,dbbrsr 就能象使用本身的表同樣對dbuser 的表執行select 操做
簡說Oracle 啓動及關閉數據庫實例
oracle 用戶,dbstart 和dbshut 啓動及關閉/var/opt/oracle/oratab 或/etc/oratab 中設定的數據庫實
例,dbstart 採用normal 方式,dbshut 採用immediate 方式。
或者使用手工方式
sqlplus 「/ as sysdba」
啓動
normal
SQL>startup
mount
SQL>startup mount; #啓動實例進程,載入數據庫文件,容許DBA權限的某些操做,但禁止對數據庫文
件的通常性操做
SQL>完成某些操做
SQL>alter database open;
nomount
SQL>startup nomount; #啓動實例進程,但不容許訪問數據庫,經常使用於建立數據庫、介質恢復或建立
controlfile
SQL>完成某些操做
SQL>alter database open;
關閉
normal
SQL>shutdown 或SQL>shutdown transactional; #等待每一個鏈接交易完成後,切斷鏈接,再關閉數據庫
immediate
SQL>shutdown immediate; #馬上停止每一個鏈接,交易回滾
abort
SQL>shutdown abort; #馬上關閉數據庫,不保證交易完整性,在下一次啓動打開數據庫文件時會進行介
質恢復
簡說Oracle 數據庫導出(exp)/導入(imp)
exp
將數據庫內的各對象以二進制方式下載成dmp 文件,方便數據遷移。
buffer:下載數據緩衝區,以字節爲單位,缺省依賴操做系統
consistent:下載期間所涉及的數據保持read only,缺省爲n
direct:使用直通方式 ,缺省爲n
feeback:顯示處理記錄條數,缺省爲0,即不顯示
file:輸出文件,缺省爲expdat.dmp
filesize:輸出文件大小,缺省爲操做系統最大值
indexes:是否下載索引,缺省爲n,這是指索引的定義而非數據,exp 不下載索引數據
log:log 文件,缺省爲無,在標準輸出顯示
owner:指明下載的用戶名
query:選擇記錄的一個子集
rows:是否下載表記錄
tables:輸出的表名列表
導出整個實例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user 應具備dba權限
導出某個用戶全部對象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
導出一張或幾張表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000
feedback=10000
導出某張表的部分數據
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000
query=\」where col1=\’…\’ and col2 \<…\」
不可用於嵌套表
以多個固定大小文件方式導出某張表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000
feedback=10000
這種作法一般用在:表數據量較大,單個dump文件可能會超出文件系統的限制
直通路徑方式
direct=y,取代buffer 選項,query 選項不可用
有利於提升下載速度
consistent 選項
自export 啓動後,consistent=y 凍結來自其它會話的對export 操做的數據對象的更新,這樣能夠保證
dump 結果的一致性。但這個過程不能太長,以避免回滾段和聯機日誌消耗完
imp
將exp 下載的dmp文件上載到數據庫內。
buffer:上載數據緩衝區,以字節爲單位,缺省依賴操做系統
commit:上載數據緩衝區中的記錄上載後是否執行提交
feeback:顯示處理記錄條數,缺省爲0,即不顯示
file:輸入文件,缺省爲expdat.dmp
filesize:輸入文件大小,缺省爲操做系統最大值
fromuser:指明來源用戶方
ignore:是否忽略對象建立錯誤,缺省爲n,在上載前對象已被創建每每是一個正常現象,因此此選項建
議設爲y
indexes:是否上載索引,缺省爲n,這是指索引的定義而非數據,若是上載時索引已創建,此選項即便爲
n 也無效,imp 自動更新索引數據
log:log 文件,缺省爲無,在標準輸出顯示
rows:是否上載表記錄
tables:輸入的表名列表
touser:指明目的用戶方
導入整_____個實例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y
feedback=10000
導入某個用戶全部對象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000
commit=y ignore=y feedback=10000
導入一張或幾張表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser
touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多個固定大小文件方式導入某張表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser
touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000
實例:Oracle 導出EXCEL 文件
FILENAME:='文件名.xls';
FHND:=TEXT_IO.FOPEN(FILENAME,'W');
LINE_BUFF:='<TAB>'||'標題名稱';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='列1<TAB>列2';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
FOR RD IN TD LOOP
LINE_BUFF:='值1'||'<TAB>'||'值2';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
CNT:=CNT+1;
SYNCHRONIZE;
END LOOP;
TEXT_IO.FCLOSE(FHND);
注:<TAB>爲按一下鍵盤上的TAB 鍵。
實例:Oracle 導出HTM文件
FILENAME:='文件名.htm';
FHND:=TEXT_IO.FOPEN(FILENAME,'W');
LINE_BUFF:='<HTML><HEAD><TITLE>標題名稱</TITLE></HEAD>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='<BODY><STYLE>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='.tdtitle{font-family: "宋體";color: #ffff11;font-size: 14px;}';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='.smtitle{font-family: "宋體";color: #0000ff;font-size: 16px;}';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='.toptitle{font-family: "宋體";color: #0000ff;font-size: 18px;}';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='.bigtitle{font-family: "隸書";color: #0000ff;font-size: 24px;}';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='td{color: #000000;font-size: 12px;}';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='</STYLE>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='<CENTER><font class=smtitle>標題名稱</font></CENTER>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='<BR><table border=1 cellspacing=0 cellpadding=0>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
LINE_BUFF:='<tr><td>列1</td><td>列2</td></tr>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
FOR RD IN TD LOOP
LINE_BUFF:='<tr><td>'||'值1'||'</td><td>'
||'<tr><td>'||'值2'||'</td><tr>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
CNT:=CNT+1;
SYNCHRONIZE;
END LOOP;
LINE_BUFF:='</BODY></HTML>';
TEXT_IO.PUT_LINE(FHND,LINE_BUFF);
TEXT_IO.FCLOSE(FHND);
查看數據庫保留字
SELECT * FROM V$RESERVED_WORDS
查看數據庫、實例、許可狀態、數據庫鏈接
SELECT * FROM V$DATABASE
SELECT * FROM V$INSTANCE
SELECT * FROM V$LICENSE
SELECT * FROM V$DBLINK
查看密碼文件用戶
SELECT * FROM V$PWFILE_USERS
查看資源限制
SELECT * FROM V$RESOURCE_LIMIT
查看數據庫選項、對象參數
SELECT * FROM V$OPTION
SELECT * FROM SYS.ARGUMENT$
查看兼容性
SELECT * FROM V$COMPATIBILITY
查看數據庫數據字典(表、視圖、索引)
SELECT * FROM V$FIXED_TABLE
SELECT * FROM V$FIXED_VIEW_DEFINITION
SELECT * FROM V$INDEXED_FIXED_COLUMN
查看數據庫NLS狀態
SELECT * FROM SYS.PROPS$
查看錶空間、控制、日誌、數據文件及備份、讀寫狀態
SELECT * FROM V$TABLESPACE
SELECT * FROM V$CONTORLFILE
SELECT * FROM V$LOGFILE
SELECT * FROM V$DATAFILE
SELECT * FROM V$BACKUP
SELECT * FROM V$FILESTAT
查看歸檔日誌數、路徑、進程
SELECT * FROM V$ARCHIVE_LOG
SELECT * FROM V$ARCHIVED_DEST
SELECT * FROM V$ARCHIVE_PROCESSES
查看回滾段名、狀態
SELECT * FROM V$ROLLNAME
SELECT * FROM V$POLLSTAT
數據字典及某些字段意義
SELECT sum(decode(n.statistic#, 15, s.value,0)) UGA,
sum(decode(n.statistic#, 20, s.value,0))/1024||'K' PGA,
sum(decode(n.statistic#, 180, s.value,0)) Sore_In_Member,
sum(decode(n.statistic#, 181, s.value,0)) Sore_In_Disk,
sum(decode(n.statistic#, 182, s.value,0)) Sore_Of_Row,
sum(decode(n.statistic#, 6, s.value,0)) User_Call,
sum(decode(n.statistic#, 5, s.value,0)) User_Rollback,
sum(decode(n.statistic#, 4, s.value,0)) User_Commit,
sum(decode(n.statistic#, 3, s.value,0)) Current_Opened_Cursor,
sum(decode(n.statistic#, 1, s.value,0)) Current_Logon,
sum(decode(n.statistic#, 9, s.value,0)) Session_Logical_Read ,
sum(decode(n.statistic#, 150, s.value,0)) Short_Table_Scans ,
sum(decode(n.statistic#, 151, s.value,0)) Long_Table_Scans
FROM V$SESSTAT s,V$STATNAME n
WHERE s.STATISTIC# = n.STATISTIC#;
select * from v$rollstat;
select * from v$sgastat;
select * from v$sysstat;
select * from V$PROCESS;
select * from V$THREAD;
select * from V$TIMER;
select * from V$OBJECT_DEPENDENCY;
select * from V$ROWCACHE;
SID:會話惟一標識
TS#:表空間惟一標識
FILE#:數據文件惟一標識
RFILE#:?
LATCT#:LATCH
PADDR;進程地址
SADDR:會話地址
SQL_ADDRESS :SQL語句地址
PREV_SQL_ADDR;前一個SQL語句地址
KADDR:鎖地址
ADDR:對象地址
LADDR:LATCH