Oracle DBA經常使用SQL

監控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:\WINNTOracle 安裝在C:\ORANT

目標:

因系統的回滾段過小,現打算生成新的回滾段,

創建大的、新的表空間(數據表空間、索引表空間、回滾表空間、臨時表空間、)

建兩個數據表空間、兩個索引表空間,這樣建的目的是根據實際應用,

如:現有10 個應用用戶,每一個用戶是一個獨立子系統(如:商業進銷存MIS系統中的財務、收款、庫存、

人事、總經理等)

尤爲大型商場中收款機衆多,同時訪問進程不少,常常達到50-100 個進程同時訪問,

這樣,經過創建多個用戶表空間、索引表空間,把各個用戶分別建在不一樣的表空間裏(多個用戶表空間放

在不一樣的物理磁盤上),

減小了用戶之間的I/O 競爭、讀寫數據與寫讀索引的競爭(用戶表空間、索引表空間也分別放在不一樣的物

理磁盤上)

規劃:

C:盤、NT 系統,Oracle 系統

D:盤、數據表空間13GB、自動擴展)、回滾表空間11GB、自動擴展)

E:盤、數據表空間23GB、自動擴展)、回滾表空間21GB、自動擴展)

F:盤、索引表空間12GB、自動擴展)、臨時表空間10.5GB、不自動擴展)

G:盤、索引表空間22GB、自動擴展)、臨時表空間20.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

--設置初始值40Minitial 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/SQLORACLE的過程化語言,包括一整套的數據類型、條件結構、循環結構和異常處理結構,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,正常定義範圍爲036,根據任務的多少,能夠配

置不一樣的數值。

第二行定義系統每隔N 秒喚醒該進程一次。系統缺省值爲60 秒,正常範圍爲13600 秒。事實上,該進

程執行完當前任務後,就進入睡眠狀態,睡眠一段時間後,由系統的總控負責將其喚醒。

若是修改了以上這幾個參數,須要從新啓動數據庫以使參數生效。

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))

OKn 毫秒)

代表深圳數據庫能夠訪問北京數據庫。

、在北京那邊也一樣配置,確認$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 不下載索引數據

loglog 文件,缺省爲無,在標準輸出顯示

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 自動更新索引數據

loglog 文件,缺省爲無,在標準輸出顯示

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:對象地址

LADDRLATCH

相關文章
相關標籤/搜索