ORACLE 10G OCA 042 筆記

zhengbao_jun發表於2009-02-18

************$1 oracle Database 10g 構件和體系結構***********************
構件
oracle Database 10g
oracle Application Server 10g;
oracle Developer Suite;
oracle Applications 11i;
oracle Collaboration Suite;
oracle Services;

應該用標準語法.使用JOIN,CROSS JOIN,NATURAL JOIN等關鍵字的ANSI SQL:1999語法,
一個Segment被定義為任何一個消耗資料庫內物理儲存空間的實體.常見的段型別:
表,索引,回退,分割槽.每個Segment由資料庫內連續儲存空間塊(盤區)構成.
作業系統塊--&gt資料庫塊--&gt盤區--&gt段
PL/SQL:Oracle Procedural Language for SQL物件:匿名程式碼塊,過程,函式,程式包,觸發器
除了SQL,Web工具,PL/SQL和JAVA之外,Oracle公司還提供了把SQL命令及資料庫連通性整合到傳統程式語言中的能

力.這種整合是通過使用Oracle預編譯器和Oracle Call Interface(OCI)來實現的.

要想成為一名成功的Oracle資料庫管理員(DBA),首先需要徹底瞭解Oracle的基礎體系架構及其機制.瞭解Oracle

的記憶體結構,後臺程式和I/O活動之間的關係是至關重要的,然後才能學習怎樣管理這些方面.

 Oracle體系結構
按以下三個類別來描述
使用者相關程式
總稱為Oracle Instance 的邏輯邏輯記憶體結構
總稱為Database的物理檔案結構

使用者程式
User Process:要麼在使用者自己的PC上,要麼在中間層應用伺服器上.然後這個User Process啟動一個與例項的連

接.Oracle把啟動和管理User Precess與例項間通訊的這個程式稱作一個Connection.一旦這個Connection建立了

起來,使用者就在例項中建立了一個Session.當建立一個會話之後,每個使用者就在主機伺服器自身上啟動了一個

Server Process(共享伺服器多個User Process共享Server Process).然後,由這個Server Process負責執行實際

允許使用者與資料庫進行互動的各項任務.
PGA(Process Global Area):程式全域性區,資料庫給每個使用者建立了一個PGA的輔助記憶體結構.PGA儲存與使用者具體

相關的會話資訊,比如Bind variable和Session variable.

Orcle例項
 一個Oracle例項由Oracle的主記憶體結構和幾個Oracle後臺程式所組成;主記憶體結構又叫做SGA(System Global

Area).當使用者訪問資料庫中的資料時,Server Process就是和SGA進行通訊.
SGA構件
Oracle把SGA記憶體劃分成叫做Granule(區組)的組快來實現動態的空間分配.4MB,8MB OR 16MB
共享儲存池:快取記憶體由資料庫使用者已經發布的最常用的SQL語句(LRU)
資料庫緩衝器告訴快取:快取記憶體由資料庫使用者最近訪問過的資料(LRU)
重做日誌緩衝器:儲存事務資訊以用於恢復目的
Java儲存池:可選,在Oracle的JVM選件得到使用時,快取記憶體最近使用的Java物件和應用軟體程式碼
大儲存池:為諸如RMAN備份與恢復之類的大型操作和Shared Server 構件快取記憶體資料
流儲存池:當Oracle的Advanced Queuing選件得到使用時,快取記憶體跟排隊的資訊請求相關聯的資料

引數:基本引數和高階引數
如:SGA_TARGET
SQL>select * from V$SGA
Fixed Size:用來儲存由例項的後臺程式所使用的資訊的輔助空間
Variable Size:Shared Pool,Large Pool,Java Pool
Database Buffers Cache:
Redo Log Buffer
SQL>select component,current_size from v$sga_dynamic_components;
或用EM DatabaseControl來檢視每個SGA構件的大小.

Oracle的後臺程式
必需:SMON(System Monitor),PMON(Process Monitor),DBWn(Database Writer),CKPT(Checkpoint)
任選:ARCn(Archive),RECO(Recover),CJQn(Job Queue Monitor),Jnnn(Job Queue),Qnnn(Parallel Queue

Slave),Dnnn(Dispatcher),Snnn(Shared Server),MMAN(Memory Manager),MMON(Memory Monitor),MMNL(Memory

Monitor Light),RVWR(Recover Writer),CTWR(Change Tracking Writer)
Unix下檢視後臺程式 $ps -ef | grep PROD
在windows環境中,還有一個叫做OracleServiceInstanceName的Windows服務與每個例項相關聯.必須啟動這個服

務,才能啟動例項.

Oracle資料庫
一個例項就是一個臨時的記憶體結構,但是Oracle資料庫是由駐留在主機伺服器的磁碟驅動器上的一組物理檔案所

構成的.這些物理檔案稱做Control File,Data File,Redo File.跟Oracle資料庫有關,但從技術上看不屬於

Oracle資料庫的附加物理檔案有Password File,PFILE,SPFILE,以及Archived redo log file.
Control File:
Data File:
Redo File:
瞭解Database Writer,Log Writer程式何時工作的.

安裝Oracle 10g
檢查技術文件->檢查系統需求->制定安裝計劃(OFA)->使用OUI   詳細看書已經文件

************$2 建立與控制資料庫*****************************************
Oracle企業管理框架
oracle Enterprise Management Framework 提供了一個全面的整合工具集,以便DBA不均那能夠使用這些工具更

輕鬆更有效的完成傳統任務,而且還能夠更有效的監視企業中的各種構件.DBA可以定製這個管理框架.
Oracle企業管理器框架的各個目標之間的通訊均由Oracle Management Agent(Oracle管理代理程式)處理.
Oracle企業管理框架分成下面這些功能區.
受管理目標:DBA使用Database Manager來管理受管理目標.包括資料庫,應用伺服器,Web伺服器,應用軟體以及象

Oracle Net監聽器和Connection Manager之類的Oracle代理程式.
oracle Management Service:一個基於Java的Web構件,該構件是DBA用來監視和控制Oracle企業管理器框架內各

個受管理目標的實際介面.
Oracle管理儲存庫:已收集到並與受管理目標有關的配置和監視資訊被儲存在一個Oracle管理儲存庫中.
oracle Enterprise Manager 10g 網格控制:一個基於Web的使用者介面,管理許多資料庫,應用伺服器,Web伺服器和

其他構件
oracle Enterprise Manager 10g資料庫控制:允許DBA監視和管理單個Oracle資料庫例項或單個RAC(Real

Application Cluster)環境.
oracle Application Control:

啟動和關閉Oracle管理代理程式
一個Oracle管理代理程式就是一個執行在每個受管理目標伺服器上的後臺程式.代理程式收集與受管理目標有關

的資料,然後與中心管理服務進行通訊.
bin>emctl start agent  在集中式的Grid Control框架內
bin>emctl start dbconsole 把資料庫作為單獨的實體來管理(含apache啟動)
bin>emctl status dbconsole
使用Database Control訪問資料庫:http://hostname:portnumber/em
使用iSql*Plus:bin>isqlplus start(Unix) windows下有相應程式
獲取Oracle構件所用埠的清單:檢查$ORACLE_HOME/install directory目錄portlist.ini檔案
把iSql*Plus設定成SYSOPER,SYSDBA特權,必須執行許多步驟.....看幫助
使用Oracle Database Conifguration Assitant
使用EM Database Control啟動Oracle 例項                 測試
檢視和了解Oracle報警日誌的內容                        google多看看

 

************$3 資料庫儲存和模式物件************************************
建立大檔案和小檔案表空間
CREATE BIGFILE TABLESPACE hist2004apr DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
處理Oracle管理檔案表空間
ALTER SYSTEM SET db_create_file='d:\oracle\oradata\omf' scope=BOTH;
選擇盤區管理方式
CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL UNIFORM;

CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

選擇段空間管理方式 MANUAL ,AUTO
CREATE TABLESPACE hist2004apr
DATAFILE '/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SEGMENT SPACE MANAGEMENT MANUAL;(預設MANUAL)

CREATE TABLESPACE hist2004apr
'/ORADATA/PROD/HIST2004APR.DBF' SIZE 25G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SEGMENT SPACE MANAGEMENT AUTO; 資料庫使用點陣圖而不是自由列來標識哪些資料塊可用於插入操作,忽略

PCT_FREE和PCT_USED引數
備註:PCT_FREE和PCT_USED針對MANUAL手工段空間管理方式...自由快列表....
我的oracle10g預設是extent management:local
segment space mangement:auto
系統表,臨時表,undo表空間必定是MANUAL的.

 


建立臨時表空間 (我的系統初始都分配了空間,某些UNIX系統是延遲分配空間的)
CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'C:\ORACLE\ORADATA\ORA10\TEMP01.DBF' SIZE 2G;

建立撤銷表空間
設定UNDO_MANAGEMENT=AUTO
CREATE DATABASE TEST
...
UNDO TABLESPACE undo
DATAFILE 'C:\ORADATA\TEST\undo01.dbf' SIZE 500M
AUTOEXTENT ON NEXT 100M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
...

CREATE UNDO TABLESPACE undo
DATAFILE '/ORADATA/PROD/UNDO01.DBF' SIZE 2G;

刪除表空間
DROP TABLESPACE hr_data INCLUDING CONTENTS AND DATAFILES;

修改表空間
ALTER TABLESPACE fin RENAME TO payables;

給表空間新增資料檔案
ALTER TABLESPACE receivables ADD DATAFILE
'/u02/oradata/ORA10/receivables01.dbf'
SIZE 2G;

離線,聯機receivables表空間
ALTER TABLESPACE receivables OFFLINE;
ALTER TABLESPACE receivables ONLINE;
只讀
ALTER TABLESPACE sales2003 READ ONLY;
ALTER TABLESPACE sales2003 READ WRITE;
置入備份模式
ALTER TABLESPACE sales2003 BEGIN BACKUP;
ALTER TABLESPACE sales2003 END BACKUP;
轉移檔案:windows中的COPY 或 UNIX 的cp命令
新位置
ALTER TABLESPACE receivables RENAME DATAFILE 'H:\ORACLE\ORADATA\ORA10\RECEIVABLES02.DBF'
TO 'C:\ORACLE\ORADATA\ORA10\RECEIVABLES02.DBF';
獲取表空間資訊
DBA_TABLESPACE;
DBA_DATA_FILES;
DBA_TEMP_FILES;
V$TABLESPACE.

使用Schema(模式)物件
一個Schema就是一個特定資料庫使用者所擁有的資料庫物件集.模式具有和資料庫使用者相同的名稱,因此兩個術語是

同義的.
模式物件包括讀者已在表空間中所見過的段(表,索引等),以及一個使用者所擁有的非段資料庫物件.如約束,檢視,

同義詞,過程,程式包.
Oracle指定資料型別:略
字元
數字
日期數字
LOB
ROWID
二進位制
The database LOB datatypes are as follows:
CLOB       Stores variable-length character data.
NCLOB    Stores variable-length character data using the Unicode character set.
BLOB       Stores binary variable-length data inside the database. BLOB data does not undergo

character
set conversion when passed between databases or between client and server processes.
BFILE       Stores binary variable-length data outside the database. BFILEs are limited to a

maximum
of 4GB of data and even less in some operating systems.
Here is an example of the LOB datatypes in use:
CREATE TABLE lob_examples
( id NUMBER
, name VARCHAR2(32)
, description VARCHAR2(4000)
, definition CLOB
, mp3 BLOB
)TABLESPACE USERS
LOB (definition) STORE AS
(TABLESPACE user3_data);

除了表和檢視所共用的名稱空間之外,資料庫還有單獨用於如下各項的名稱空間:
索引
約束
聚類
資料庫觸發器
專用資料庫連結
量綱
角色
公用資料庫連結
表空間
概況
引數檔案(PFILE)

建立表
CREATE TABLE change_log
NOLOGGING COMPRESS 
TABLESPACE archive   
(log_id NUMBER
,who    VARCHAR2(64)
,when   TIMESTAMP
,what   VARCHAR2(200)
);
NOLOGGING選項告訴資料庫,不要把改表的內容記錄到重做日誌上,也不要把後續的直接路徑插入操作記錄到重做

日誌上.
COMPRESS選項告訴資料庫,使用資料庫壓縮把資料新增到表中,因而需要較少的磁碟空間.

建立臨時表:兩種 ON COMMIT DELETE ROWS ,ON COMMIT PRESERVE ROWS
給表或列新增註釋
COMMENT ON TABLE change_log IS
'this table is where you record changes to the configuration of the DEMO system';
DBA_COL_COMMENTS

重新命名錶:ALTER TABLE CHANGE_LOG RENAME TO DEMO_CHANGE_LOG;

新增和刪除表中的列
ALTER TABLE change_log ADD how VARCHAR2(45);
ALTER TABLE CHANGE_LOG ADD
(HOW VARCHAR2(45),
WHY  VARCHAR2(60)
);

修改列
ALTER TABLE CHANGE_LOG MODIFY
(WHAT VARCHAR2(250),
WHO VARCHAR2(50) DEFAULT USER
);

以下如果9i中出現,略.加快速度

索引
B樹索引是預設的索引型別,適用於中或大基數列,B樹索引支援行級加鎖,因此適用於多使用者的事務應用.支援

PRIMARY KEY 或UNIQUE約束的索引是B樹索引.
點陣圖索引最適用於低到中基數列的多種組合(不能建立一個唯一性點陣圖索引),而且它們不支援行級加鎖.點陣圖索引

在資料修改受到限制和控制的環境中最佳,比如許多資料倉儲應用軟體.由於點陣圖索引不能有效的對被索引資料做

修改,所以它們在資料裝入開始之前被刪去,在資料裝入完成後被重建.

處理序列
create sequence employee_seg start with 100500 nomaxvalue nominvalue;

************$4 oracle Net服務*****************************************
Interprocess Communication 程式間通訊(IPC) 程式間通訊(IPC)是執行在多工作業系統中或聯網計算機上的

程式和程式使用的一組技術
程式使用IPC的一個好處是,能有效地利用其它程式或計算機的過程
雖然網路變得越來越複雜,但也變得越來越容易使用和管理.
DBA的網路責任
瞭解可以採用的網路配置選項,並根據本組織的需求知道應該怎樣使用那些選項.
瞭解本組織的基礎網路體系結構,以便制定有遠見卓識的設計決策.
於網路工程師緊密合作來保證與oracle伺服器的一致而又可靠的連線.
瞭解可以用來配置和管理網路的各種工具
診斷並排除與使用者,中間層和伺服器有關的連線問題.
保證安全的連線,並在必要時使用現有網路配置來獲得敏感資料傳輸的較高安全度
緊跟可能對網路設計決策有影響的最新行業趨勢和Oracle體系結構的最新變化

網路配置
單層 終端直接連線到主機計算機,不存在網路協議與多作業系統的複雜性.
雙層 經常叫做客戶/伺服器計算.可縮放性不行.
n層  引進了位於客戶與資料庫伺服器之間的中介軟體[MIDDLEWARE]構件,比如應用伺服器或Web伺服器.這個模型是

可縮放的,並且把表示,業務邏輯和路由選擇以及資料庫處理等任務分配給許多計算機.許多因素正驅動著n層計算

,比如Internet和網格計算;後者使用大量的後端處理器來縮放資料庫服務和連線.

Oracle特性綜述
連通性:客戶可以使用許多方法與一個oracle資料庫進行互動(多協議支援,多作業系統,JDBC)
可管理性:Web應用,位置透明性(資料庫表現為一個或多個資料庫服務),目錄命名(Directory Naming)
可縮放性:Oracle Shared Server,Oracle Connectiion Manager(多路複用,網路訪問,交叉協議連通性
安全:Oracle Advanced Security,防火牆支援
可訪問性:Heterogeneous Service(異構服務),外部過程
目錄命名:Directory Naming使得服務名稱能夠通過一個集中式命名儲存庫來解析.這個中心儲存庫採取LDAP

(Lightweight Direcory Access Protocol)伺服器的形式.LDAP是一個協議和一種語言,它定義一種用來儲存,標

識和檢索服務的標準方法,同時提供了一種管理資訊目錄的簡化方式,無論這些資訊是與一個組織內的使用者有關,

還是與已連線到一個網路的Oracle服務有關.

在伺服器上配置Oracle Net
瞭解Oracle監聽器,監聽器響應連線請求.
4種連線方法型別:
專用連線:直接握手方法
專用連線:重定向方法
oracle Shared Server:直接握手方法
oracle Shared Server:重定向方法

管理Oracle監聽器
用Oracle Net Manager 管理監聽器.
用Oracle Enterprise Manager管理監聽器          測試
用lsnrctl管理監聽器:
啟動:lsnrctl start
重新裝入監聽器::lsnrctl reload
顯示監聽器的狀態:lsnrctl status
列舉服務:lsnrctl service

動態地註冊服務
例項向本地計算機上鎖定義的監聽器進行了註冊.動態服務註冊使得管理員能夠利用其他特性,比如符負荷均衡和

自動故障切換.PMON程式負責向監聽器註冊這些資訊.
當使用了動態服務註冊後,管理員將看不到listener.ora中鎖列舉得伺服器.要想檢視檔案中所列舉得服務,執行

lsnrctl service命令.
配置引數:INSTANCE_NAME,SERVICE_NAME
如:Instance_name=DBA
Service_name=DBA.GR.COM
該監聽器必須被配置為預設監聽器,否則需指定引數LOCAL_LISTENER.
如:local_listener="(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=WEISHAN)(PORT=1522)))

使用多個監聽器時的附加配置
如果使用者擁有一個含有大量併發連線請求的複雜網路環境,或者正在使用一個ORACLE RAC這樣的高階資料庫設計,

則可以配置多個監聽器更好的管理連線負荷.讀者由此增大了功能度.這些特性包括:
Connect-Time Failover,Transparent Application Failover,Client Load Balancing,Connection Load

Balancing.
Connect-Time Failover(連線時間故障切換)
客戶tnsnames.ora中指定多個監聽器位置.如果連線到第一個監聽器失敗,則嘗試連線監聽器列表中的下一個監聽

器.
Transparent Application Failover(透明應用故障切換TAF)
如RAC中,TAF進行故障切換,並重新建立應用軟體到服務連線.它允許客戶應用軟體自動重新連線到資料庫(如果連

接出現故障),而且可選地繼續執行一條已在執行中的SELECT語句.重新連線從OCI庫中自動發生.             測


Client Load Balancing(客戶負載平衡)
允許客戶從一個監聽器列表中隨機地挑選.Oracle Net遍歷這個監聽器列表,並在現有監聽器之間平衡連線請求地

符合.
                                                                             測試                 

                                       
Connection Load Balancing(連線負荷平衡)
允許更好地在一個Oracle Shared Server環境內的一組排程程式之間分佈連線


診斷伺服器段連線問題
伺服器端計算機與資料庫檢查
檢查伺服器計算機:ping
檢查資料庫:sql*plus嘗試本地連線
檢查資料庫對所有使用者是開放的
檢查使用者許可權

伺服器段網路檢查
檢查監聽器:lsnrctl status
檢查GLOBAL_DBNAME
檢查監聽器協議:lsntctl service
檢查伺服器協議:ping(tcp/ip)
檢查伺服器協議介面卡:呼叫OUI程式,並檢查已安裝協議的列表.在Unix平臺上,可以使用Adapters實用工具來保

證適當的協議介面卡被連結到Oracle.
[xxx]./adapters oracle
檢查連線超時設定
INBOUND_CONNECT_TIMEOUT設定成一個較大的值,加大有效響應的等待時間.

伺服器上Oracle Net日誌和跟蹤
伺服器日誌:監聽器日誌,Unix系統上是$oracle_home/network/log,windows下是%oracle_home%\network\log.

測試
伺服器跟蹤                                                 啟用,檢視,測試

配置客戶Oracle Net
客戶端名稱解析:該客戶必須提供3段資訊:使用者ID,密碼和網路服務名稱.網路服務名稱用一個連線描述符的形式

提供在網路中查詢一個oracle服務所必須的資訊.
網路服務的5種解析方法.
oracle Internet Directory,External Naming,Host Naming,Oracle easy connect, Local Naming.
oracle Internet Directory:處理含有許多oracle伺服器的複雜網路時有優勢.管理員可以在一個集中位置上配

置和管理Net service Names和路徑描述符資訊.
External Naming:使用一個非oracle工具管理和解析Oracle服務名稱,例如:NIS
主要考察以下三種
Host Naming:
oracle Easy Connect Naming:
10g新引進的,指定主機,埠,服務名稱
如:connect scott/tiger@jlsjls:1522/orcl.com
Local Naming:也叫做tnsnames.ora方法.網路服務名稱,網路協議,主機名和埠,服務名,測試網路服務名連線
使用EM配置本地命名,                                    測試

診斷並解決客戶端連線問題
檢查客戶/伺服器聯絡:ping
確定客戶正用來到達伺服器的網路路由:
xxx:/home/oracle>traceroute 10.15.9.11
cmd>tracert 10.20.3.3
檢查客戶/監聽器聯絡
cmd>tnsping orcl 2  (tnsping工具嘗試連線一個oracle監聽器)
檢查本地命名配置檔案
查詢多客戶網路配置檔案(略)
檢查網路檔案位置
檢查NAMES.DIRECTORY_PATH
檢查NAMES.DEFAULT_DOMAIN
檢查客戶協議介面卡
檢查客戶端錯誤碼
 

************$5 oracle 共享伺服器**************************************
oracle Shared Server適用於"高思維"應用.高思維應用由再事務模式中使用自然暫停的小事務組成.許多基於

Web的應用適合這個模型.要確定一個應用是不是Oracle Shared Server的候選者時,檢查該應用,並考慮一個與數

據庫伺服器的典型客戶互動所生成的網路通訊量.如果給定最流行網路的速度,並且一個典型的客戶互動包含16kb

或更少的資料,那麼它是一個適合使用Oracle Shared Server的候選者.

oracle Shared Server的基礎結構
使用Oracle Shared Server時的PGA與SGA變化
當Oracle Shared Server得到配置時,Oracle給SGA增加兩種新型的結構;請求佇列喝響應佇列.專用伺服器中是不

存在這兩種結構的.對於所有的排程程式,只存在一個請求佇列,但每個排程程式都有各自的響應佇列.
專用伺服器環境中,每個伺服器中有一個叫做PGA的記憶體段,是維護關於每個客戶會話資訊的地方,包括賦值變數,

遊標資訊以及客戶的分類資料.在oracle shared server環境中,這個資訊被轉移到SGA中一個叫做UGA的區域.讀

者可以配置SGA中一個Large Pool的特殊區域來容納UGA的大部分.


專用伺服器PGA:遊標狀態,使用者會話資料,棧空間
共享伺服器PGA:棧空間
由上可知:專用伺服器,UGA是在PGA中分配的.而在SHARED SERVER中,UGA在LARGE POOL池中分配.
Virtual circuit:正由一個排程程式所維護的每個連線都被分配給一個共享記憶體段,並形成一個虛擬電路.排程程

序使用這個共享記憶體段來管理客戶Oracle資料庫之間的通訊.
監聽器收到一個連線請求,它檢查每個排程程式的當前連線符合,並把客戶連線請求重定向到最小負荷排程程式.

確定所有節點的最小負荷排程程式--如果RAC正得到使用.

配置Oracle Shared Server
oracle 10g不必指定DISPATCHERS引數就能啟用一個預設網路環境中的共享伺服器(簡化了).
oracle 10g的一個優點是管理Oracle Shared Server所需要的所有引數都能被動態地修改.

使用DISPATCHERS引數
只需指定ADDRESS,DESCRIPTION或PROTOCOL即可.資料越密集型地操作喝併發連線地數量越大,每個排程程式處理

地會話應該越少.一般來說,起始點是為每個排程程式預留50個併發會話.
讀者可以用如下公式來確定最初要配置地排程程式數量:
Number of Dispatchers
=CEIL(maximum number of concurrent sessions/connections per dispatcher)
example:DISPATCHERS="(PRO=TCP)(DIS=3)(PRO=IPC)(DIS=2)"
由V$session檢視可確定併發連線地數量
v$LICENSE
SESSION_CURRENT:會話的當前數量
SESSION_HIGHWAITER:自例項啟動以來的最大併發會話數量
修改:ALTER SYSTEM SET DISPATCHERS="(PRO=TCP)(DIS=5)";

使用DISPATCHERS引數配置連線集儲特性
Connection Pooling(連線集儲):通過自動斷開空閒連線和使用空閒連線為一個輸入連線請求提供服務,給Oracle

Shared server賦予了較大數量連線的能力.
設定Pool,Tick屬性具體看書
DISPATCHERS="(PROTOCOL=TCP)(DISPATCHERS=1)(POOL=ON)(TICK=1)(CONNECTIONS=500)(SESSIONS=1000)"

使用MAX_DISPATCHERS引數
使用SHARED_SERVERS引數:預設1,0或者未設定禁用.一般來說,對於將要使用共享伺服器連線的各種高思維應用軟

件,每個共享伺服器擁有25個併發連線應該是足夠使用的.
SHARED_SERVER_SESSIONS:使用這個引數限制共享伺服器會話的總數量.
MAX_SHARED_SERVER:

管理共享伺服器
>lsnrctl service  顯示關於排程程式程式的資訊
動態效能檢視
V$DISPATCHER:關於排程程式的資訊,活動情況,正在處理的連線數量,自例項啟動以來已經處理的總連線數量.
sql>select name,status,messages,idle,busy,bytes,breaks from v$dispatcher;
V$DISPATCHER_CONFIG 新增的檢視,關於排程程式的配置資訊.
sql>select conf_indx,dispatchers,connections,sessions sess,service from v$dispatcher_config where

network like '%TCP%';
V$DISPATCHER_RATE:排程程式的統計資訊
sql>select name,cur_event_rate,cur_msg_rate,cur_svr_byte_rate from v$dispatcher_rate;
V$QUEUE:請求和響應佇列的資訊,比如請求在佇列中等待多長時間
sql>select * from v$queue;
V$CIRCUIT:顯示oracle shared server虛擬電路的資訊,
sql>select circuit,dispatcher,server,waiter WTR,status,queue,bytes from v$circuit;
V$SHARED_SERVER:顯示共享伺服器程式的資訊
sql>select name,status,messages,bytes,idle,busy,requests from v$shared_server;
V$SHARED_SERVER_MONITOR:...最大併發連線數,啟動的服務起數..等資訊,有助於調節oracle shared server.
sql>select maximum_connections "MAX CONN",maximum_sessions "MAX SESS",servers_started "STARTED"

from v$shared_server_monitor;
V$SESSION:有關客戶會話的豐富資訊.
sql>select username,program,server from v$session;


在共享伺服器環境中請求一個專用連線
本地命名中新增....略

調節共享伺服器選項                     測試
確定Large Pool 大小:Large Pool應該大得足以容納讀者的所有共享伺服器連線的有關資訊.一般所來,每個連線

需要1MB到3MB之間的空間,但這取決於該客戶的活動型別.正在做大量分類操作或開啟許多遊標的物件將使用更多

的記憶體.
sql>alter system set large_pool_size=10m;
sql>select * from v$sgastat where pool = 'large pool';
確定是否有足夠的排程程式:如果排程程式的繁忙的時間百分比超過50%,則需要考慮啟動更多的排程程式.
sql>select name,(busy/(busy+idle)) *100 "Dispatcher %busy Rate" from v$dispatcher;
sql>alter system set dispatchers ="(PRO=TCP)(DIS=4)";
測量使用者等候排程程式多長時間:數值過大,需要增加更多的排程程式
sql>select decode(sum(totalq),0,'No response',Sum(wait)/sum(totalq)) "Average ait time" from

v$queue q,v$dispatcher d where q.type='DISPATCHER' AND q.paddr=d.paddr;
監視一段時間,如果不斷增大,則需要考慮增加更多的排程程式.
確定是否有足夠的共享伺服器:....
sql>select decode(totalq,0,'No Requests') "Wati Time", Wait/totalq || ' hundredths of seconds'

"Average wait time per request" from v$queue where type='COMMON';
監視之,如果不斷增大,考慮增加更多共享伺服器.
查詢當前的sql>select name,status,requests,messages,bytes,breaks from v$shared_server;

 以上標記測試的,大都未測試,趕時間看書
*************$6 使用者管理與安全******************************************
術語"使用者賬號","賬號","使用者","模式"均是可以互換的,並且指一個擁有模式物件的資料庫使用者賬號.
配置身份驗證:密碼驗證,外部驗證,全域性驗證
密碼驗證式使用者:略
外部驗證式使用者:當一個外部驗證式使用者連線到資料庫時,資料庫核實使用者名稱是一個有效的資料庫賬號,並確信操

作系統已經完成了身份驗證.這些賬號有時稱作OPS$(發音為ahps dollar)賬號,引進這些賬號時,他們必須加上前

綴.(一般OPS$,有引數可以設定)
CREATE USER OPS$ORACLE IDENTIFIED EXTERNALLY
外部驗證經常用於管理性指令碼,以便密碼不必嵌入在一個人類可以可理解的指令碼中.
全域性驗證式使用者:當一個全域性驗證式使用者試圖連線到資料庫時,資料庫驗證使用者名稱時一個有效的資料庫賬號,並把

連線資訊傳遞給高階安全選項以供驗證.高階安全選項支援幾個用於身份驗證的機制,其中包括生物測定,X.509證

書,Kerberos和RADIUS.
CREATE USER SPY_MASTER IDENTIFIED GLOBALLY AS 'CN=SPY_MASTER,OU=TIER2,O=SECURITY,C=US';

分配預設表空間
......default tablespace.....

分配臨時表空間
....temporary tablespace....

給使用者分配概況
...profile resource_profile;

授予和取消特權
物件特權:模式物件上的特權,比如表,檢視,序列,過程一級包等模式物件.
系統特權:資料庫級操作上的特權,比如連線到資料庫....
角色特權:一個使用者作為一個角色所擁有的物件與系統特權.

授予物件特權
各種許可權以後細看....
grant....with grant option...當是角色時,不能使用with grant option
如果使用..with grant option後,又取消該特權,該取消發生級聯作用.
一個被授權者可以從多個授權者那裡獲得一個特權,當同一個特權的這種多次授權發生時,取消這些授權之一將不

刪除該特權.

授予系統特權
Oracle有170多種系統特權,並且所有這些系統特權均被列舉在SYSTEM_PRIVILEGE_MAP資料目錄檢視中.
熟悉以下幾組特權.
資料庫:
ALTER DATABASE,ALTER SYSTEM,AUDIT SYSTEM(語句審計),AUDIT ANY(任意一個模式中物件上的物件審計)
除錯:
DEBUG CONNECT SESSION(允許被授權者把當前會話連線到一個排程程式.)
DEBUG ANY PROCEDURE(允許被授權者除錯資料庫中的所有PL/SQL和Java程式碼.相當於授予每個適用物件的DEBUG對

象特權.
索引:
CREATE ANY INDEX:允許被授權者在任意一個模式中建立一個索引.
ALTER ANY INDEX:允許被授權者更改任意一個模式中的索引
DROP ANY INDEX:允許被授權者從任意一個模式中刪除索引.
作業排程程式:
CREATE JOB:允許被授權者在他們自己的模式中建立作業,程式和時間表.
CREATE ANY JOB:...
EXECUTE ANY PROGRAM:
EXECUTE ANY CLASS:
MANAGE SCHEDULER:
過程
CREATE PROCEDURE
CREATE ANY PROCEDURE
ALTER ANY PROCEDURE
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
概況
CREATE PROFILE
USER語句(需要ALTER USER特權)
ALTER PROFILE
DROP PROFILE
角色
CREATE ROLE
ALTER ANY ROLE
DROP ANY ROLE
GRANT ANY ROLE
序列
CREATE SEQUENCE
CREATE ANY SEQUENCE
ALTER ANY SEQUENCE
DROP ANY SEQUENCE
SELECT ANY SEQUENCE
會話
CREATE SESSION
ALTER SESSION
ALTER RESOURCE COST
RESTRICTED SESSION
同義詞
CREATE SYNONYM
CREATE ANY SYNONYM
CREATE PUBLIC SYNONYM
DROP ANY SYNONYM
DROP PUBLIC SYNONYM

CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
DROP ANY TABLE
COMMENT ANY TABLE
SELECT ANY TABLE
INSERT ANY TABLE
UPDATE ANY TABLE
DELETE ANY TABLE
LOCK ANY TABLE
FLASHBACK ANY TABLE
....略

 

.....
和物件特權相同的是,可以把系統特權授予特殊使用者PUBLIC.給PUBLIC授予特權允許任何一個擁有資料庫帳戶的人

運用這個特權.
如果利用WITH ADMIN OPTION 關鍵字授予一個系統特權,隨後又取消該特權,那麼被授權者的特權將不被取消.和

物件特權不同的是,系統特權的取消不發生級聯作用.

角色特權
角色特權給被授權者授予一組系統,物件和其他角色特權.角色可以是密碼保護的,所以使用者可能擁有一個已授給

他們的角色,但還不能在所有資料庫會話中使用該角色.
建立與管理角色
CREATE ROLE appl_dba
SET ROLE appl_dba IDENTIFIED BY seekwrit;
授予角色特權
GRANT oem_monitor TO  charlie;
GRANT PLUSTRACE TO PUBLIC;
GRANT create ANY TABLE TO appl_dba with admin option;
當提到給一個角色授予WITH ADMIN OPTION時,角色的行為看起來象系統特權,而且後續的取消不會發生級聯作用.
啟用角色
set role hr_admin identified by "my!seekrit",employee;
set role all except hr_admin;
檢視當前會話得到啟用的角色
select role from sessin_roles;
檢視已分配給使用者或特殊使用者PUBLIC的角色.
USER_ROLE_PRIVS describes the roles granted to the current user.
select granted_role from user_role_privs where username in(USER,'PUBLIC');
檢視已在讀者的會話中得到啟用和直接授給讀者或PUBLIC的角色,但不包括讀者所繼承的那些角色,執行下列語句

.
SELECT role FROM session_roles INTERSECT
SELECT granted_role FROM user_role_privs
WHERE username IN(USER,'PUBLIC');

禁用角色
SET ROLE NONE
SET ROLE ALL EXCEPT role_list
不存在任何有選擇性地禁用單個角色的方法.不能禁用自己作為另一個角色所繼承來的角色,除非禁用了父角色.

設定預設角色
...ALTER USER scott DEFAULT ROLE ALL EXCEPT plustrace;
由於一個角色的建立者自動擁有該角色,並且該角色被配置為一個預設角色,所以建立了許多角色的管理性使用者(

比如SYS或SYSTEM)可能需要修改他們的預設角色列表.

按使用者控制資源使用
分配表空間限額
....quota 100M ON USERS;


利用概況分配資源限額
一個資料庫呼叫是一個語法分析,一個執行或一個取資料。通常,資料庫隱含地替讀者執行這些呼叫。讀者可以

明確地從JAVA,PS/SQL或OCI程式中做這些資料庫呼叫。一個邏輯讀是資料庫在執行SQL語句期間所完成的工作量

的一種度量。邏輯讀被計算為一致獲取與當前模式獲取的總和。
Logical reads include blocks read from both memory and disk.
Logical reads :The sum of "db block gets" plus "consistent gets"
db block gets :Number of times a CURRENT block was requested
consistent gets:Number of times a consistent read was requested for a block
db_block_gets + consistent_gets = LOGICAL IO
physical_reads = PHYSICAL IO
http://www.oracledba.com.cn/blog/?p=37 一篇帖子很好,以後看


啟用(9i,10g預設都沒啟用)
ALTER SYSTEM SET resource_limit=TRUE SCOPE=BOTH;
支援下列限定資源的字句
CONNECT_TIME             sql>CREATE PROFILE agent LIMIT CONNECT_TIME 10;
CPU_PER_CALL             sql>CREATE PROFILE agent LIMIT CPU_PER_CALL 3000; (以毫秒為單位,即1秒的

百分數)
                         sql>ALTER PROFILE data_analyst LIMIT CPU_PER_CALL UNLIMITED;
CPU_PER_SESSION          sql>CREATE PROFILE agent LIMIT CPU_PER_SESSION 30000;
IDLE_TIME                sql>ALTER PROFILE agent LIMIT IDLE_TIME  10 (分鐘,執行時間很長的SQL語句

不受這個設定影響)
LOGICAL_READS_PER_CALL   sql>ALTER PROFILE agent LIMIT LOGICAL_READS_PER_CALL 2500;
LOGICAL_READS_PER_SESSIONsql>ALTER PROFILE agent LIMIT LOGICAL_READS_PER_SESSION 1000000;
PRIVATE_SGA              sql>以位元組為單位限定一個連線到共享伺服器的使用者能夠給PGA中的持久區域分配的

SGA記憶體量.(書解釋)
                         sql>使用者能夠在SGA中使用的私有的空間數 單位bytes .共享伺服器模式下PGA的一

些區域(UGA)到了SGA中(網路解釋)
                         sql>ALTER PROFILE agent LIMIT PRIVATE_SGA 2500;
SESSION_PER_USER         sql>ALTER PROFILE agent LIMIT SESSION_PER_USER 2;
COMPOSITE_LIMIT :限定在一個使用者會話期間能夠被消費的服務單元數量。服務單元被計算為

CPU_PER_SESSION,LOGICAL_READS_PER_SESSION,CONNECT_TIME,PRIVATE_SGA的加權總和。加權使用ALTER

RESOURCE COST 語句設立,for example:  alter resource cost connect_time 0 ;並能夠從RESOURCE_COST數

據目錄檢視中被檢視。
                         sql>ALTER PROFILE agent LIMIT COMPOSITE_LIMIT 1000000; 
sql>select * from dictionary where instr(comments,'profile')>0;   DBA_PROFILES

應用最少特權原則
DBA_TAB_PRIVS:DBA_TAB_PRIVS describes all object grants in the database
DBA_SYS_PRIVS:DBA_SYS_PRIVS describes system privileges granted to users and roles.
example:列出由使用者sys所擁有的,並且已經把execute特權授給了public的各個包
select table_name from dba_tab_privs p,dba_objects o where p.owner=o.owner and

p.table_name=o.object_name and p.owner='SYS' and p.privilege='EXECUTE' and p.grantee='PUBLIC' AND

o.object_type='PACKAGE';
列出所有擁有SELECT ANY TABLE特權的使用者
select * from DBA_SYS_PRIVS WHERE PRIVILEGE='SELECT ANY TABLE';
保護資料目錄:確保擁有select_any_table特權的使用者無法通過設定:(第一個字母是歐)

O7_dictionary_accessibility=false來訪問資料目錄的基礎表。這是預設設定。
從PUBLIC中取消取消不必要的特權:
REVOKE EXECUTE ON utl_tcp FROM PUBLIC;
REVOKE EXECUTE ON utl_smtp FROM PUBLIC;
REVOKE EXECUTE ON utl_http FROM PUBLIC;
REVOKE EXECUTE ON utl_file FROM PUBLIC;
REVOKE EXECUTE ON dbms_obfuscation_toolkit FROM PUBLIC;
REVOKE EXECUTE ON dbms_crypto FROM PUBLIC;

限定擁有管理特權的使用者
SYSDBA:最高,沒有任何理由授給SYS之外的使用者
DBA:允許被授權者在整個資料庫分配特權和操縱資料,慎重。
ANY系統許可權:select any table,grant any role,delete anyy table...

不啟用REMOTE_OS_AUTHENT 初始化引數REMOTE_OS_AUTHENT的預設設定是FALSE.

每個使用者只應該被授予執行其工作所需要的最少特權.這個原則是一個以初始封閉原理為中心的原則.
我們應該採取幾個動作,同時設定或鎖定資料庫
保護資料目錄:確保擁有SELECT ANY TABLE特權的使用者無法通過設定07_DICTIONARY_ACCESSIBILITY=FALSE來訪問

資料目錄的基礎表.
從PUBLIC中取消不必要的特權.具體看書                      
限定擁有管理特權的使用者:                                  
看DBA和SYSDBA的區別
不啟用REMOTE_OS_AUTHENT

管理預設的使用者賬號
sys和system賬號分別是資料目錄擁有者和一個管理性帳戶.sysman和dbsnmp帳戶由Enterprise Manager使用.

實現標準密碼安全特性:找到這個指令碼的位置,執行。
$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
@%ORACLE_HOME%\rdbms/admin\utlpwdmg.sql

顯示錶空間限額
select tablespace_name,username,bytes,max_bytes from dba_ts_quotas;
顯示概要檔案的資訊
select profile,resource_name,limit from dba_profiles where profile='DEFAUTL';

審計資料庫活動()

審計記錄可以儲存在資料庫中,也可以儲存在作業系統檔案中以獲得更高的安全性
Audit_trail:把審計記錄寫到什麼地方.預設位置是NONE.
sql>alter system set AUDIT_TRAIL=DB scope=spfile;
寫到資料庫:大部分審計項被記錄在sys.aud$表中。
寫到OS中:unix--audit_file_dest  ;windows--Event Viewer日誌檔案中
AUDIT_TRAIL=OS(不測試了)
....
四個審計級別:語句,特權,物件和精細訪問.

管理語句審計
audit table;
audit table by cxy;
audit table by cxy whenever not successful;
audit insert table by cxy by access;
識別已啟用的語句審計選項
select audit_option,failure,success,user_name from dba_stmt_audit_opts order by

audit_option,user_name;
禁用語句審計
noaudit session;
noaudit not exists;
noaudit table by cxy;
檢查審計跟蹤
select username,timestamp,action_name from dba_audit_trail where username='TEST01';

管理特權審計
啟用
audit create any table;
audit create any table by test01;
標識已啟用的特權審計選項
select privilege,user_name from dba_priv_audit_opts order by privilege,user_name;
禁用
noaudit alter profile;
noaudit delete any table by juanita;
noaudit alter user by juanita;

管理物件審計:監視和記錄需要一個指定物件特權的sql語句的執行,比如select,insert,update,delete或

execute物件特權
和語句或系統特權審計不同的是,模式物件審計不能被限定於指定使用者--它針對所有使用者或者針對無使用者被啟用.
啟用
audit select on hr.EMP_DETAILS_VIEW BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT ON HR.EMP_DETAILS_VIEW BY SESSION WHENEVER NOT SUCCESSFUL;
標識已啟用的物件審計選項
SELECT owner,object_name,object_type,ins,sel FROM dba_obj_audit_opts WHERE wner='HR' AND

object_name='EMP_DETAILS_VIEW';
禁用物件審計
NOAUDIT SELECT ON HR.EMP_DETAILS_VIEW WHENEVER NOT SUCCESSFUL;

清除審計跟蹤
DELETE FROM SYS.AUD$ WHERE TIMESTAMP#

管理精細審計(Fine-grained auditing,簡稱FGA)允許讀者基於資料的內容監視和記錄資料訪問.
可以使用PL/SQL包DBMS_FGA來配置和管理FGA
引數解釋:

object_schema,object_name,policy_name,audit_condition,audit_column,handler_schema,handler_module,e

nable,audit_trail,audit_column_ops
object_schema:待審計物件的所有者,預設NULL
object_name: 待監視物件的名稱
policy_name:心策略的一個唯一性名稱
audit_condition:sql表示式,為真時,一個審計記錄建立,語法有些限制,如不能使用一些函式,子查詢或者序列.
audit_column: 逗號分隔的列列表,資料庫將要訪問這些列.如果audit_column被參考,且audit_condition為

true,審計記錄得到建立.
handler_schema:事件處理程式的所有者
handler_module:事件處理程式過程的名稱.
enable:啟用,預設true
statement_types:要監視那些型別的sql語句.預設是select
audit_trail:是否把sql語句和用於觸發sql的賦值變數記錄在審計跟蹤中.預設值DBMS_FGA.DB_EXTENDED記錄之,

應該把引數設定成DBMS_FGA.DB,以便節省空間.
audit_column_ops: 兩個有效值:DBMS_FGA.ALL_COLUMNS    DBMS_FGA.ANY_COLUMNS
建立FGA策略(未啟用)
EXECUTE DBMS_FGA.ADD_POLICY

(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD',audit_column=>'SALAR

Y,COMMISSION_PCT',enable=>FALSE,statement_types=>'SELECT');
啟用
EXECUTE DBMS_FGA.ENABLE_POLICY

(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
禁用
DBMS_FGA.DISABLE_POLICY

(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
刪除FGA策略
EXECUTE DBMS_FGA.DROP_POLICY

(object_schema=>'HR',object_name=>'EMPLOYEES',policy_name=>'COMPENSATION_AUD');
識別資料庫中的FGA策略
SELECT policy_name,object_name||'.'||object_name object_name,policy_column,enabled,audit_trail

from dba_audit_policies;
製作FGA審計跟蹤資料項的報表
SELECT db_user,timestamp,userhost from dba_fga_audit_trail where policy_name='COMPENSATION_AUD';

 

 

 

************$7 使用SQL,PL/SQL和實用程式管理資料************************
大量的資料庫特性是作為PL/SQL程式來實現的,而且知道怎樣識別和處理這些PL/SQL程式對資料庫管理員的工作

效率來說是至關重要的.
5種型別的命名的PL/SQL程式:Function,Procedure,Package,Package body,Trigger,這些程式通常被儲存在資料

庫中.每個儲存式PL/SQL程式的

名稱和原始碼都可以從DBA_SOURCE和DBA_TRIGGERS資料目錄檢視中獲取,儘管有些供給的程式包經過了"包裝",二

進位制的.
看sql開發指南一書。
處理函式
DECLARE today DATE DEFAULT SYSDATE;
today:=SYSDATE;
IF TO_Char(SYSDATE,'Day')='Monday'
SELECT COUNT(*) FROM hr.employees WHERE hire_date>SYSDATE-30;
SELECT TRUNC(SYSDATE)
_____________________________________________________________
CREATE OR REPLACE FUNCTION is_weekend(
check_date IN DATE DEFAULT SYSDATE)
RETURN VARCHAR2 AS
BEGIN
 CASE TO_CHAR(check_date,'DY')
 WHEN 'SAT' THEN
  RETURN 'YES';
 WHEN 'SUN' THEN
  RETURN 'YES';
 ELSE
  RETURN 'NO';
 END CASE;
END;
-------------------------------------------------------------------
處理過程
CREATE OR REPLACE PROCEDURE archive_orders
(cust_id IN NUMBER
,retention IN NUMBER) IS
BEGIN
 DELETE orders
 WHERE customer = cust_id
 AND order_date < SYSDATE - retention;
 INSERT INTO maint_log
 (action,action_date,who) VALUES
 ('archive orders '|| retention || ' for '|| cust_id
 ,SYSDATE,USER);
END;
---------------------------------------------------------------------
set serverout on
EXEC DBMS_OUTPUT.PUT_LINE('HELLO WROLD!');
--------------------------------------------------
CALL DBMS_OUTPUT.PUT_LINE('HELLO WROLD!');
---------------------------------------------------
處理程式包
一個程式包就是一個用於函式,過程和資料結構(比如記錄,遊標,變數,和約束)的容器.一個程式包擁有一個叫做

規約(簡寫為spec)的公用部分和

一個叫做程式包體的私有部分.
程式包規約:PACKAGE型別
程式包體:PACKAGE BODY型別
-----------------------------------------------------
CREATE OR REPLACE PACKAGE table_util IS
FUNCTION version RETURN VARCHAR2;
PROCEDURE truncate (table_name IN VARCAHR2);
END table_util;
--------------------------------------------------
CREATE OR REPLACE PACKAGE BODY table_util IS
version_string VARCHAR2(8) := '1.0.0';
FUNCTION version RETURN VARCHAR2 IS
BEGIN
 RETURN version_string;
END;
PROCEDURE truncate(table_name IN VARCHAR2) IS
BEGIN
 IF UPPER(table_name) = 'ORDER_STAGE'
 OR UPPER(table_name) = 'SALES_ROLLUP'
 THEN
  EXECUTE IMMEDIATE 'trunate table ' || UPPER(table_name);
 ELSE
  RAISE_APPLICATION_ERROR(-20010,Invalid table for truncate: '|| table_name);
 END IF;
END;
END table_util;
------------------------------------------------------------------------------------
處理觸發時間和管理觸發器
DML,DDL,資料庫事件
具體見書
--------------------------------------------------------------
CREATE OR REPLACE TRIGGER employee_trg
BEFORE INSERT OR UPDATE OF hire_date
ON employee FOR EACH ROW
BEGIN
 log_update(USER,SYSTIMESTAMP);  --這個函式查不到???
 IF INSERTING THEN -- if fired due to insert
     :NEW.create_user := User;
     :NEW.create_ts   :=SYSTIMESTAMP;
 ELSIF UPDATING THEN -- if fired due to update
     IF :OLD.hird_date <> :NEW.hire_date THEN
  RAISE_APPLICATION_ERROR(-20013,'update of hire_date not allowed');
     END IF;
 END IF;
END;
-----------------------------------------------------------------------------------
事件:INSERT,UPDATE,DELETE
順序:在語句觸發器之前--&gt行觸發器之前--&gt行觸發器之後--&gt語句觸發器之後.
DDL事件觸發器:略
資料庫事件觸發器:略


使用和管理PL/SQL程式
desc 包
每當一個依賴物件通過alter 語句被編譯時,一個pl/sql程式就變得無效。下次呼叫是自動重新編譯。但我們可

以選擇手工編譯無效的PL/SQL

程式,for example:
ALTER PROCEDURE archive_orders COMPILE;
ALTER FUNCTION is_weekend COMPILE;
alter package table_util compile body;
配置PL/SQL來獲取較佳的效能
PLSQL_WARNING:10G新引進的,指出潛在問題,幫助開發人員建立更好的程式.生產中禁用,alter system set

plsql_warning='DISABLE:ALL'

scope=both;
PLSQL_DEBUG:迫使後續的pl/sql編譯都得到翻譯幷包含輔助的除錯資訊.生產中禁用它.
alter system set plsql_debug = false scope=both;
PLSQL_OPTIMIZE_MODE:一個優化的編譯程式,啟用它.
alter system set plsql_optimize_level=2;
PLSQL_CODE_TYPE:指定將plsql程式碼編譯成預設翻譯的位元組碼還是本級程式碼.本機程式碼較長編譯時間和較大一些的

管理性開銷,較快速的執行時性

能.
啟用本機編譯:c編譯程式,設定引數PLSQL_NATIVE_LIBRARY_DIR,並保證該目錄存在.設定引數

PLSQL_CODE_TYPE='NATIVE'  ...以後測試

建立目錄物件,需要擁有create any directory系統特權,謹慎,這個資料庫採用資料庫例項所有者的作業系統憑

證.
create directory dump_dir as '/home/oracle/data_pump/dumps';(用作業系統命令建立目錄,保證存在該目錄

)
create directory log_dir as '/home/oracle/data_pump/logs';(用作業系統命令建立目錄,保證存在該目錄)
資料轉儲
Data Pump[資料轉儲]工具是10g引進的一個特性.它是一種在資料庫之間或者在資料庫與作業系統檔案之間傳輸

資料或後設資料的高速機制.Data

Pump採用目錄路徑上載和直接路徑裝入技術.和exp和imp不同,Data Pump工具執行在伺服器上.因此資料庫管理員

必須使用一個資料庫目錄來指定轉儲檔案和目錄檔案位置,給使用者操作目錄的許可權.(grant read,write on

directory XXXXXX to public | XXXXX)
使用Data Pump匯出資料
執行expdp  :
資料庫匯出方式: expdp system/cxx full=y dumpfile=chap7a:fulla%U.dmp,chap7b:fullb%U.dmp filesize 2G

parallel=2 logfile=chap7:full.log
物件模式匯出
expdp hr/hr dumpfile=chap7:hr.dmp logfile=chap7:hr.out
表匯出方式
expdp hr/hr dumpfile=chap7:job_tabs.dmp nologfile=y content=metadata_only tables=jobs,job_history
表空間匯出方式
expdp system/cxy110 dumpfile=chap7:users_ts.dmp logfile=chap7:users_ts.out tablespaces=users(ora-

39139 錯誤,data pump不支援xml....解決:用傳統的exp)


expdp test07/cxy110 dumpfile=chap7:tbs07_ts.dmp logfile=chap7:tbs_ts.out tablespaces=tbs07


DBMS_DTAPUMP
使用DBMS_DTAPUMP設定一個DATA PUMP比僅使用獨立程式麻煩一些,但是可提供較高的功能度和控制權.
example:


DECLARE
  h1 NUMBER;  --HANDLE FOR THE dATE pUMP SESSION
BEGIN
  -- Obtain a handle to an export Data pump session
  h1 := dbms_datapump.open(
      peration => 'EXPORT'       --export not import
     ,job_mode => 'SCHEMA');      --schema mode
--   ,job_mode => 'FULL');        --database mode
--   ,job_mdoe => 'TABLE');       --table mode
--   ,job_mode => 'TABLESPACE');  --tablespace mode
 --define the log file
 dbms_datapump.add_file(
   handle => h1                   -- from the open call
  ,filename => 'hr.out'          -- file name
  ,directory => 'CHAP7'          --database directory object
  ,filetype => dbms_datapump.ku$_file_type_log_file);
 --define the dump file
 dbms_datapump.add_file(
  handle => h1             -- from the open call
 ,filename => 'hr.dmp'     -- file name
 ,directory => 'CHAP7'     -- database directory object
 ,filetype => dbms_datapump.ku$_file_type_dump_file);
 --define schemas to exprot
 dbms_datapump.metadata_filter(
 handle => h1             -- from the OPEN call
 ,name => 'SCHEMA_EXPR'   --schema name filter
 -- ,name => 'INCLUDE_NAME_EXPR'    --TABLE NAME FILTER
 -- ,name => 'EXCLUDE_NAME_EXPR'    --table name filter
 -- ,name => 'TABLESPACE_EXPR' -- tablespace name filter
 ,value => 'IN(''hr'')');           --name list
  --invoke data pump
dbms_datapump.start_job(handle => h1);   -- from the open call
 -- run the job in the background
dbms_datapump.detach(handle => h1);
end;


EM Database Control(略,可從中生成PL/SQL程式碼,熟悉DATAPUMP)

使用Data Pump  匯入資料
impdp system/paasword full=y dumpfile=chap7:FULL.DMP nologfile=y sqlfile=chap7:FULL.SQL(只生成DDL

語句,不匯入資料)


impdp system/password network_link=prod schema="HR" remap_schema="HR:HR_TEST"

content=metadata_only logfile=chap7:HR_TEST.LOG(先建立好DB_LINK,是否不支援連線遠端ORACLE 9I???)


impdp system/password full=y dumpfile=chap7:HR.DMP nologfile=y sqlfile=chap7:HR_proc_give.SQL

include=PROCEDURE:"LIKE 'GIVE%'"

impdp system/password network_link=prod schema="HR" remap_schema="HR:HR_TEST" content=data_only

include=TABLE:"= 'DEPARTMENTS'" logfile=chap7:HR_TEST.LOG


impdp system/cxyxxxx tablespaces=TBS07 dumpfile=chap7:tbs07_ts.dmp nologfile=y(匯入表空間,先在目標

資料庫建立表空間和使用者,dumpfile是一個表空間的匯出檔案)
使用包和使用OEM略


************$8 管理一致性與併發性*********************************
oracle 10g 保留使用者自從一個事務開始以來已被修改過的資料所需要的撤銷資料. oracle的GUI工具EM

Database control使撤銷管理和調整大小變得很容易.UNDO ADVISOR收集統計資料,幫助管理員調整撤銷表空間的

大小,以便一個事務的DML語句能順利執行完畢,同時又使SELECT語句不返回"快照太舊"的錯誤.
作用:rollback對資料庫的修改,支援讀一致,支援回閃查詢,資料庫恢復操作(回退未提交資料).
一個資料庫可以有一個以上的撤銷表空間,可只有一個表空間是活動的.
sql>select * from v$rollname;(檢索當前活動撤銷段的名稱)
V$TRANSACTION動態效能檢視顯示一個事務和各撤銷段的關係.
for example:
sql>set transaction name 'update clerk salaries';
sql>update hr.employees set salary = salary * 1.25 where job_id like '%CLERK';
SQL>select xid,status,start_time,xidusn seg_num,r.name seg_name from v$transaction t join

v$rollname r on t.xidusn=r.usn where t.name='update clerk salaries';
說明:insert語句幾乎不使用撤銷表中的空間.  新錶行的指標被儲存在撤銷表空間中.
還可把讀一致性應用於一個完整的事務.如下所示:
>set transaction read only;
直到該事務回退或者提交之前,該事務中的所由查詢只能看到該事務提交之前發生在其他表中的已提交的事務.換

句話說,只讀事務不能含有任何一條修改表資料的語句,無論表駐留在什麼地方.例如ALTER SUER語句.
sql>alter system set undo_management = auto  scope=spfile;   --或 manual
sql>alter system set undo_tablespace=undo_atch;
sql>alter system set undo_retention = 43200; (12小時)
UNDO_RETENTION引數:
撤銷資訊分三類:未提交撤銷資訊,已提交撤銷資訊,過期撤銷資訊.

監視撤銷表空間
OEM(oracle 10g 圖 中長查詢以分鐘為單位,是是否顯示錯了),使用UNDO ADVISOR
SQL>SELECT  to_char(begin_time,'yyyy-mm-dd hh24:mi:ss') starttime,to_char(end_time,'yyyy-mm-dd

hh24:mi:ss') endtime,undoblks,maxquerylen maxqrylen from v$undostat;

手工使用V$UNDOSTAT檢視確定撤銷表空間的大小
undo_tablespace_size = UR * UPS * blocksize    (UR--UNDO_RETENTION,UPS--UNDOBLKS)
for example:undo_tablespace_size = 43200 * 626 * 8192 = 206 GB  再乘(1+10~20%)

保障撤銷保持能力
sql>alter tablespace undotbs1 retention guarantee;
sql>alter tablespace undotbs1 retention noguarantee;
sql>select tablespace_name,contents,retention from dba_tablespaces;

監視加鎖和解決鎖衝突
加鎖方式(文字費解,以後看)
ROW SHARE
ROW EXCLUSIVE
SHARE
SHARE ROW EXCLUSIVE
EXCLUSIVE

SQL>LOCK table hr.employees,hr.departments in EXCLUSIVE MODE;
sql>select * from hr.employees where mnager_id = 100 for update;
sql>lock table hr.employees in share row exclusive mode nowait;

檢測鎖衝突 OEM---performance---instance locks  很直觀,自給看看了.kiss session(死鎖處理)


死鎖示例
  會話1                                                                時間                       

               會話2
update employees set salary=salary          11:29                                   update

employees set manager=100
*1.2 where employee_id=102;                                                                   

where employee_id=190;
update employees set salary=salary          11:44                                   update

employees set manager=100
*1.2 where employee_id=190;                                                                    

*1.2 where employee_id=102;
ORA-00060:Deadlock detected while         11:45                                  還會等,如果會話1

rollback or comited
waiting for resource ,                                                                            

       才執行完畢
此時commited 或者rollbakc吧                                                                       

 

************$9 前瞻性資料庫維護與效能監視**************************
oracle新增的特性
Automatic Workload Repository(AWR)
Automated Database Diagnostic Monitoring (ADDM)
Oracle 10g Tuning and Diagnostic advisor
DBA用兩種方式來監視系統的管理和效能問題.
reactive monitoring(反應性監視)
proactive monitoring(前瞻性監視)
從各種源(資料目錄,動態效能檢視和作業系統等)中收集資料,還把基於代價的優化器統計資料廣泛用於它的前瞻

性監視.
AWR:MMON(memory monitor),MMNL(memory monitor light)二程式合作收集資料.MMON每60分醒來一次,從資料目

錄檢視,動態效能檢視和優化器中收集資料.然後儲存在AWR中.
儲存這些資料的表(AWR)由SYSMAN擁有.在SYSAUX表空間中.
啟用AWR特性:設定statistics_level引數:BASIC,TYPICAL,ALL
修改時間間隔:
sql>execute dbms_workload_repository.modify_snapshot_settings(interval=>60,retention=>43200);(以分

鍾為單位,30天,1小時)
sql>begin DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(14400,60); end;

AWR執行完畢之後,ADDM自動分析收集到的統計資料,並把它們和前兩個AWR快照所收集的統計資料進行比較.分析

結果儲存在AWR中.
ADDM會推薦可能的糾正方法,目標是最大限度降低DB TIME.  db time = cpu時間和等待時間 (非空閒資料庫使用者

累加所有非空閒使用者的會話時間)


oem介面語言設定:
set NLS_LANG = american_america.ZHS16GBK
SET nls_lang =SIMPLIFIED CHINESE_CHINA.ZHS16GBK

OEM平時多觀查。圖不知如何理解。

使用資料目錄檢視檢視ADDM分析
ADDM Data Dictionary Views
View Name :Description
DBA_ADVISOR_FINDINGS :Describes the findings identified by the ADDM analysis
DBA_ADVISOR_OBJECTS : Describes the objects that are referenced in the ADDM findings and

recommendations
DBA_ADVISOR_RECOMMENDATIONS:Describes the recommendations made based on  ADDM findings
DBA_ADVISOR_RATIONALE :Describes the rationale behind each ADDM finding

The following SQL statement shows a sample query on the DBA_ADVISOR_FINDINGS data dictionary view

that identifies the type of performance problem that is causing the most impact
on the database:
SQL> SELECT task_id, type, message FROm dba_advisor_findings WHERE impact= (select MAX(impact)

FROM dba_advisor_findings);

TASK_ID value shown in the query on DBA_ADVISOR_FINDINGS. A query on that view, using the TASK_ID

of 164 returned by the ADDM session that had the potential for the greatest database
impact, returns the SQL statements shown here:
sql> SELECT attr4 FROM dba_advisor_objects WHERE task_id = 164;

The following query shows the recommendations for correcting the performance issues associated

with TASK_ID 164, which was identified earlier as being the costliest database activity:
SQL> SELECT TRIM(attr1) ATTR1, TRIM(attr2) ATTR2, TRIM(attr3) ATTR3 FROM dba_advisor_actions WHERE

task_id = 164;

The following example shows a sample query on the DBA_ADVISOR_RATIONALE view using the TASK_ID of

164 identified earlier:
SQL> SELECT message FROM dba_advisor_rationale WHERE task_id = 164;

ADDM診斷顧問(測試)
SQL Tuning Advisor
SQL Access Advisor
Memory Advisor
Mean Time To Recover Advisor
Segment Advisor
Undo Management Advisor

ADDM Alerts
測試下傳送郵件報警……
測試下基準度量的收集……
ADDM怎樣計算閥值:AWR儲存每個度量標準的高位值和低位值。計算方法取決於制定該閥值的比較運算子和相關的

高位值和低位值。

效能監視:
dba應該再開始任何調節努力之前準確測出系統當前正在怎樣執行。(如各種基準度量標準等)
Sources of Tuning Information
The Alert log
Background and user trace files
Dynamic performance views
Data dictionary views
The Alert log:The Oracle Alert log records informational and error messages for a variety of

activities that
have occurred against the database during its operation.
Background and user trace files:Oracle trace files are text files that contain session

information for the process that created
them。
Dynamic performance views: V$SGASTAT V$EVENT_NAME V$SYSTEM_EVENT V$SESSION_EVENT V$SESSION_WAIT

V$STATNAME V$SYSSTAT V$SESSTAT V$SESSION V$WAITSTAT
OEM廣泛使用這些檢視,不一個一個瞭解了。
Data dictionary views:DBA_TABLES Table DBA_INDEXES INDEX_STATS DBA_DATA_FILES DBA_SEGMENTS

DBA_HISTOGRAMS DBA_OBJECTS
Identifying Unusable Objects Using Data Dictionary
SQL> SELECT owner, object_name, object_type FROM dba_objects WHERE status = 'INVALID';
ALTER PACKAGE my_package COMPILE;
ALTER PACKAGE my_package COMPILE BODY;
ALTER PROCEDURE my_procedure COMPILE;
ALTER FUNCTION my_function COMPILE;
ALTER TRIGGER my_trigger COMPILE;
ALTER VIEW my_view COMPILE;

SQL> SELECT owner, index_name, index_type FROM dba_indexes WHERE status = 'UNUSABLE';
SQL> ALTER INDEX hr.job_id_pk REBUILD;
用OEM實現查詢編譯索引重建,很方便。索引重建選擇離線或聯機還可以制定“便箋式”表空間(儲存中間結果

Storing Database Statistics in the Data Dictionary
Some columns in the DBA views are not populated with data until the table or index referenced
by the view is analyzed.
The cost-based optimizer (CBO) uses these statistics to formulate efficient execution plans
for each SQL statement that is issued by application users.
Because of this, the statistics gathered and stored in the data dictionary views are sometimes
called optimizer statistics.
Automatic Collection of Statistics:DBCA建立的資料庫,預設,定時執行
Manual Collection of Statistics(不推薦,有定時的job)
OEM:略
Manually Gathering Statistics Using DBMS_STATS:備份舊的統計資料,允許以後恢復,執行並行分析更快速

收集統計資料等……
GATHER_INDEX_STATS  GATHER_INDEX_STATS GATHER_SCHEMA_STATS GATHER_DATABASE_STATS
如:The following example shows how the DBMS_STATS packages can be used to gather statistics on

the PRODUCT_HISTORY table in SH’s schema:
SQL> EXECUTE DBMS_STATS.GATHER_TABLE_STATS (‘SH’,’PRODUCT_HISTORY’);
The presence of accurate optimizer statistics has a big impact on two important measures of

overall system performance: throughput and response time.

Important Performance Metrics
Throughput is another example of a statistical performance metric. Throughput is the amount of

processing that a computer or system can perform. in a given amount of time,
Throughput is an important measure when considering the scalability of the system. Scalability

refers to the degree to which additional users can be added to the system without
system performance declining significantly.
Another important metric related to performance is response time. Response time is the amount of

time that it takes for a single user’s request to return the desired result when using
an application
把伺服器的I/O能力告訴ADDM
做I/O測試,我們的磁碟子系統預設的是10毫秒值

Summary
Oracle 10g provides many tools for proactively identifying and fixing potential performance
and management problems in the database. At the core of the monitoring system is the Automatic
Workload Repository (AWR), which uses the MMON background process to gather statistics
from the SGA and store them in a collection of tables owned by the user SYSMAN.
Following each AWR statistics collection interval, the Automatic Database Diagnostic Monitoring
(ADDM) feature examines the newly gathered statistics and compares them with the
two previous AWR statistics to establish baselines in an attempt to identify poorly performing
components of the database. The ADDM then summarizes these findings on the EM Database
Control main and Performance screens. Using these screens, you can identify and examine the
SQL statements that are contributing the most to DB Time. You can further explore the

opportunities
for improving the performance or manageability of your database using the EM Database
Control advisors, which include the SQL Tuning Advisor, SQL Access Advisor, Memory
Advisor, Mean Time To Recover Advisor, Segment Advisor, and Undo Management Advisor.
Using the SQL Tuning Advisor, you can identify the SQL statements that have had the greatest
performance impact on the database. You can then examine these statements using the SQL
Access Advisor to determine if adjustments can be made to improve the execution paths for
these statements and therefore minimize their impact on total DB Time.
The Memory Advisor suggests changes that can potentially improve Oracle’s use of memory
within the SGA and PGA.
The Mean Time To Recover Advisor helps you determine if your database is properly configured
to meet service-level agreements for instance recovery in the event of a server failure or
an instance crash.
The Segment Advisor helps you determine which segments are using excess storage space and
which might benefit from a shrink operation. Shrinking these segments not only frees storage
space for use by other segments, but also minimizes the number of physical I/Os required to
access the segments.
Using the Undo Management Advisor, you

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-555226/,如需轉載,請註明出處,否則將追究法律責任。

相關文章