一位朋友說他們正在做EAI的項目,對于EAI,沒有接觸太深,以前項目中有這一塊,卻沒怎么參與。于是問了一句,"EAI究竟是服務于什么目的"?提起這個名詞,在我腦海中蹦出的關鍵詞是諸如實時、總線、消息等,然而,這些似乎只是它的技術特征。
類似的名詞包括EII和ETL,ETL是BI項目中必有的部分,也是目前每個項目戲份最重的環節。ETL有一種定義,如"抽取、轉換和裝載,為了分析的目的,將數據從多種數據源抽取,經過轉換、清洗,裝載到另一個數據庫的過程,包括數據集市和數據倉庫,或者是另一個操作型系統",我不知道這是誰的定義,恐怕也恐怕很難有權威的定義。在這個定義中,ETL是廣義的,它是數據流動的過程,沒有說它究竟是批量的或是實時的。因此,按照這個定義,EAI也就像是ETL。
EAI,全名為企業應用集成,這提升到一個比較高的層面,相比之下,"數據"顯得太微觀,太底層了。不錯,現實的情況是企業的IT環境中,大量不同的系統同時并存,缺乏總體規劃。在這種情況下,提出應用集成也是形勢所逼。比如聯通的經營分析和客戶維系挽留系統,缺乏規劃的時候,他們就有功能重疊的地方,各自的廠商為了自己的利益,不可能顧及"應該"如何,只是將自己的蛋糕劃分得大一些才好。因此,諸如"客戶價值模型"這樣得東西就會搶來搶去。可能這種交叉應用的存在,才導致人們對應用集成的愿望,他們希望能夠統一地看這些不同的應用,就像一個完整的大系統在運行一樣。
但顯然,如果達到這樣的程度,理想的程度,并非一種技術就能搞定。所以,EAI的定義顯得比ETL定義更加"虛頭八腦",而在實際項目中看來,EAI的主要功能就是數據的集成,在多個應用之間共享數據,聯通里面一般管這叫做"交互性"。技術實現上,它更像是CDC(變化數據捕獲)+ETL。
至于EII,名稱上意思為"企業信息集成",按照數據、信息到知識這個從低到高的層次,EII聽起來又比ETL高級一些。然而對它,更加沒有深入了解。也不明白它為什么會蹦出這個名詞,是和ETL、EAI并列還是有取代他們的意思。從它的定義來看,EII是建立了一個虛擬的數據庫,用戶向這個虛擬庫提交查詢,而EII將這種查詢物理地分布到各個不同的數據源中,然而返回數據,對于用戶來說,他沒有意識到這批數據是來自不同應用、不同數據庫的。
喔,很酷,不過難度不小,因為這不是技術問題。假設理想的情況下,能夠為數據源建立詳盡的、一致的元數據,能夠有一個引擎實現這種分布式查詢,當然可以EII。然而我們不是生活在理想國,為不同的數據源建立一致的元數據幾乎是不可能,這涉及到各個系統廠商的管理、系統設計以及維護能力,無法僅僅通過技術手段保證的。所以,EII,我只能暫且將它看作是未來理想。
在建立數據倉庫時,
ETL通常都采用批處理的方式,一般來說是每天的夜間進行跑批。
隨著數據倉庫技術的逐步成熟,企業對數據倉庫的時間延遲有了更高的要求,也就出現了目前常說的實時ETL(Real-Time ETL)。實時ETL是數據倉庫領域里比較新的一部分內容。
在構建實時ETL架構的數據倉庫時,有幾種技術可供選擇。
1.微批處理(microbatch ETL,MB-ETL)
微批處理的方式和我們通常的ETL處理方式很相似,但是處理的時間間隔要短,例如間隔一個小時處理一次。
2.企業應用集成(Enterprise Application Integration,EAI)
EAI也稱為功能整合,通常由中間件來完成數據的交互。而通常的ETL稱為數據整合。
對實時性要求非常高的系統,可以考慮使用EAI作為ETL的一個工具,可以提供快捷的數據交互。不過在數據量大時采用EAI工具效率比較差,而且實現起來相對復雜。
3.CTF(Capture, Transform and Flow)
CTF是一類比較新的數據整合工具。它采用的是直接的數據庫對數據庫的連接方式,可以提供秒級的數據。CTF的缺點是只能進行輕量級的數據整合。通常的處理方式是建立數據準備區,采用CTF工具在源數據庫和數據準備區的數據庫之間相連接。數據進入數據準備區后再經過其他處理后遷移入數據倉庫。
4.EII(Enterprise Information Integration)
EII是另一類比較新的數據整合軟件,可以給企業提供實時報表。EII的處理方式和CTF很相似,但是它不將數據遷移入數據準備區或者數據倉庫,而是在抽取轉換后直接加載到報表中。
在實際建立實時ETL架構的數據倉庫時,可以在MB-ETL, EAI, CTF, EII及通常的ETL中作出選擇或者進行組合。
Oracle數據庫提供了幾種不同的數據庫啟動和關閉方式,本文將詳細介紹這些啟動和關閉方式之間的區別以及它們各自不同的功能。
一、啟動和關閉Oracle數據庫
對于大多數Oracle DBA來說,啟動和關閉Oracle數據庫最常用的方式就是在命令行方式下的Server Manager。從Oracle 8i以后,系統將Server Manager的所有功能都集中到了SQL*Plus中,也就是說從8i以后對于數據庫的啟動和關閉可以直接通過SQL*Plus來完成,而不再另外需要Server Manager,但系統為了保持向下兼容,依舊保留了Server Manager工具。另外也可通過圖形用戶工具(GUI)的Oracle Enterprise Manager來完成系統的啟動和關閉,圖形用戶界面Instance Manager非常簡單,這里不再詳述。
要啟動和關閉數據庫,必須要以具有Oracle 管理員權限的用戶登陸,通常也就是以具有SYSDBA權限的用戶登陸。一般我們常用INTERNAL用戶來啟動和關閉數據庫(INTERNAL用戶實際上是SYS用戶以SYSDBA連接的同義詞)。Oracle數據庫的新版本將逐步淘汰INTERNAL這個內部用戶,所以我們最好還是設置DBA用戶具有SYSDBA權限。
二、數據庫的啟動(STARTUP)
啟動一個數據庫需要三個步驟:
1、 創建一個Oracle實例(非安裝階段)
2、 由實例安裝數據庫(安裝階段)
3、 打開數據庫(打開階段)
在Startup命令中,可以通過不同的選項來控制數據庫的不同啟動步驟。
1、STARTUP NOMOUNT
NONOUNT選項僅僅創建一個Oracle實例。讀取init.ora初始化參數文件、啟動后臺進程、初始化系統全局區(SGA)。Init.ora文件定義了實例的配置,包括內存結構的大小和啟動后臺進程的數量和類型等。實例名根據Oracle_SID設置,不一定要與打開的數據庫名稱相同。當實例打開后,系統將顯示一個SGA內存結構和大小的列表,如下所示:
SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 35431692 bytes
Fixed Size 70924 bytes
Variable Size 18505728 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
2、STARTUP MOUNT
該命令創建實例并且安裝數據庫,但沒有打開數據庫。Oracle系統讀取控制文件中關于數據文件和重作日志文件的內容,但并不打開該文件。這種打開方式常在數據庫維護操作中使用,如對數據文件的更名、改變重作日志以及打開歸檔方式等。在這種打開方式下,除了可以看到SGA系統列表以外,系統還會給出"數據庫裝載完畢"的提示。
3、STARTUP
該命令完成創建實例、安裝實例和打開數據庫的所有三個步驟。此時數據庫使數據文件和重作日志文件在線,通常還會請求一個或者是多個回滾段。這時系統除了可以看到前面Startup Mount方式下的所有提示外,還會給出一個"數據庫已經打開"的提示。此時,數據庫系統處于正常工作狀態,可以接受用戶請求。
如果采用STARTUP NOMOUNT或者是STARTUP MOUNT的數據庫打開命令方式,必須采用ALTER DATABASE命令來執行打開數據庫的操作。例如,如果你以STARTUP NOMOUNT方式打開數據庫,也就是說實例已經創建,但是數據庫沒有安裝和打開。這是必須運行下面的兩條命令,數據庫才能正確啟動。
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
而如果以STARTUP MOUNT方式啟動數據庫,只需要運行下面一條命令即可以打開數據庫:
ALTER DATABASE OPEN.
4、其他打開方式
除了前面介紹的三種數據庫打開方式選項外,還有另外其他的一些選項。
(1) STARTUP RESTRICT
這種方式下,數據庫將被成功打開,但僅僅允許一些特權用戶(具有DBA角色的用戶)才可以使用數據庫。這種方式常用來對數據庫進行維護,如數據的導入/導出操作時不希望有其他用戶連接到數據庫操作數據。
(2) STARTUP FORCE
該命令其實是強行關閉數據庫(shutdown abort)和啟動數據庫(startup)兩條命令的一個綜合。該命令僅在關閉數據庫遇到問題不能關閉數據庫時采用。
(3) ALTER DATABASE OPEN READ ONLY;
該命令在創建實例以及安裝數據庫后,以只讀方式打開數據庫。對于那些僅僅提供查詢功能的產品數據庫可以采用這種方式打開。
三、數據庫的關閉(SHUTDOWN)
對于數據庫的關閉,有四種不同的關閉選項,下面對其進行一一介紹。
1、SHUTDOWN NORMAL
這是數據庫關閉SHUTDOWN命令的確省選項。也就是說如果你發出SHUTDOWN這樣的命令,也即是SHUTDOWN NORNAL的意思。
發出該命令后,任何新的連接都將再不允許連接到數據庫。在數據庫關閉之前,Oracle將等待目前連接的所有用戶都從數據庫中退出后才開始關閉數據庫。采用這種方式關閉數據庫,在下一次啟動時不需要進行任何的實例恢復。但需要注意一點的是,采用這種方式,也許關閉一個數據庫需要幾天時間,也許更長。
2、SHUTDOWN IMMEDIATE
這是我們常用的一種關閉數據庫的方式,想很快地關閉數據庫,但又想讓數據庫干凈的關閉,常采用這種方式。
當前正在被Oracle處理的SQL語句立即中斷,系統中任何沒有提交的事務全部回滾。如果系統中存在一個很長的未提交的事務,采用這種方式關閉數據庫也需要一段時間(該事務回滾時間)。系統不等待連接到數據庫的所有用戶退出系統,強行回滾當前所有的活動事務,然后斷開所有的連接用戶。
3、SHUTDOWN TRANSACTIONAL
該選項僅在Oracle 8i后才可以使用。該命令常用來計劃關閉數據庫,它使當前連接到系統且正在活動的事務執行完畢,運行該命令后,任何新的連接和事務都是不允許的。在所有活動的事務完成后,數據庫將和SHUTDOWN IMMEDIATE同樣的方式關閉數據庫。
4、SHUTDOWN ABORT
這是關閉數據庫的最后一招,也是在沒有任何辦法關閉數據庫的情況下才不得不采用的方式,一般不要采用。如果下列情況出現時可以考慮采用這種方式關閉數據庫。
1、 數據庫處于一種非正常工作狀態,不能用shutdown normal或者shutdown immediate這樣的命令關閉數據庫;
2、 需要立即關閉數據庫;
3、 在啟動數據庫實例時遇到問題;
所有正在運行的SQL語句都將立即中止。所有未提交的事務將不回滾。Oracle也不等待目前連接到數據庫的用戶退出系統。下一次啟動數據庫時需要實例恢復,因此,下一次啟動可能比平時需要更多的時間。
表1可以清楚地看到上述四種不同關閉數據庫的區別和聯系。
表1 Shutdown數據庫不同方式對比表
關閉方式 |
A |
I |
T |
N |
允許新的連接 |
× |
× |
× |
× |
等待直到當前會話中止 |
× |
× |
× |
√ |
等待直到當前事務中止 |
× |
× |
√ |
√ |
強制CheckPoint,關閉所有文件 |
× |
√ |
√ |
√ |
其中:A-Abort I-Immediate T-Transaction N-Nornal
一 JSP2.0與JSP1.2比較
JSP 2.0是對JSP 1.2的升級,新增功能:
1. Expression Language (我平常都叫EL表達式的)
2. 新增Simple Tag和Tag File
3.web.xml新增<jsp:config>元素
- 特別說明:<jsp-config> 元素主要用來設定JSP相關配置,<jsp-config> 包括<taglib>和<jsp-property-group>子元素。
-
- (1)其中<taglib>以前的Jsp1.2中就有的,taglib主要作用是作為頁面taglib標簽中的uri和tld文件的一個映射關系
-
- (2)其中<jsp-property-group>是JSP2.0種新增的元素。
- <jsp-property-group> 主要包括8個子元素,它們分別是:
-
- <jsp-property-group>
-
- <description>
- 設定的說明
- </description>
-
- <display-name>設定名稱</display-name>
-
- <url-pattern>設定值所影響的范圍</url-pattern>
-
- <el-ignored>若為true則不支持EL語法</el-ignored>
-
- <page-encoding>ISO-8859-1</page-encoding>
-
- <scripting-invalid> 若為true則不支持<% scripting%> 語法</scripting-invalid>
-
- <include-prelude>設置JSP網頁的抬頭,擴展名為.jspf </include-prelude>
-
- <include-coda>設置JSP網頁的結尾,擴展名為.jspf</include-coda>
-
- </jsp-property-group>
-
- 例如: 其中抬頭程序:
- prelude.jspf
- <br>
- <center>
- 文本內容
- </center>
- <hr>
-
- 結尾程序:
- coda.jspf
- <br>
- <center>
- 文本內容
- </center>
- <hr>
二、Servlet個版本比較
servlet 2.3 新增功能:
2000年10月份出來
Servlet API 2.3中最重大的改變是增加了filters(過濾器)
servlet 2.4 新增功能:
2003年11月份出來
1、web.xml DTD改用了XML Schema;
Servlet 2.3之前的版本使用DTD作為部署描述文件的定義,其web.xml的格式為如下所示:
xml 代碼
- <?xml version="1.0" encoding="IS0-8859-1"?>
- <!DOCTYPE web-app
- PUBLIC "-//sunMicrosystems,Inc.//DTD WebApplication 2.3f//EN"
- "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
- <web-app>
- .......
- </web-app>
Servlet 2.4版首次使用XML Schema定義作為部署描述文件,這樣Web容器更容易校驗web.xml語法。同時XML Schema提供了更好的擴充性,其web.xml中的格式如下所示:
xml 代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:workflow="http://www.workflow.com"
- xmins:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- .........
- </web-app>
注意: 改為Schema后主要加強了兩項功能:
(1) 元素不依照順序設定
(2) 更強大的驗證機制
主要體現在:
a.檢查元素的值是否為合法的值
b.檢查元素的值是否為合法的文字字符或者數字字符
c.檢查Servlet,Filter,EJB-ref等等元素的名稱是否唯一
2.新增Filter四種設定:REQUEST、FORWARD、INCLUDE和ERROR。
3.新增Request Listener、Event和Request Attribute Listener、Enent。
4.取消SingleThreadModel接口。當Servlet實現SingleThreadModel接口時,它能確保同時間內,只能有一個thread執行此Servlet。
5.<welcome-file-list>可以為Servlet。
6.ServletRequest接口新增一些方法。
public String getLocalName()
public String getLocalAddr()
public int getLocalPort()
public int getRemotePort()
Servlet 2.5的新特征
2005年9月發布Servlet 2.5
Servlet2.5一些變化的介紹:
1) 基于最新的J2SE 5.0開發的。
2) 支持annotations 。
3) web.xml中的幾處配置更加方便。
4) 去除了少數的限制。
5) 優化了一些實例
servlet的各個版本對監聽器的變化有:
(1)servlet2.2和jsp1.1
新增Listener:HttpSessionBindingListener
新增Event: HttpSessionBindingEvent
(2)servlet2.3和jsp1.2
新增Listener:ServletContextListener,ServletContextAttributeListener
,HttpSessionListener,HttpSessionActivationListener,HttpSessionAttributeListener
新增Event: ServletContextEvent,ServletContextAttributeEvent,HttpSessionEvent
(3)servlet2.4和jsp2.0
新增Listener:ServletRequestListener,ServletRequestAttribureListener
新增Event: ServletRequestEvent,ServletRequestAttributeEvent
三、J2EE規范版本比較
1.J2EE的發展
1997年Servlet技術的產生以及緊接著JSP的產生,為Java對抗PHP,ASP等等服務器端語言帶來了籌碼。1998年,Sun發布了EJB1.0標準,至此J2EE平臺的三個核心技術都已經出現。于是,1999年,Sun正式發布了J2EE的第一個版本。并與1999年底發布了J2EE1.2,在2001年發布了J2EE1.3,2003年發布了J2EE1.4。
2.J2EE1.3
J2EE1.3的架構,其中主要包含了Applet容器,Application Client容器,Web容器和EJB容器,并且包含了Web Component,EJB Component,Application Client Component,以JMS,JAAS,JAXP,JDBC,JAF,JavaMail,JTA等等技術做為基礎。
1.3中引入了幾個值得注意的功能:Java消息服務(定義了JMS的一組API),J2EE連接器技術(定義了擴展J2EE服務到非J2EE應用程序的標準),XML解析器的一組Java API,Servlet2.3,JSP1.2也都進行了性能擴展與優化,全新的CMP組件模型和MDB(消息Bean)。
3.J2EE1.4
J2EE1.4大體上的框架和J2EE1.3是一致的,1.4增加了對Web服務的支持,主要是Web Service,JAX-RPC,SAAJ,JAXR,還對EJB的消息傳遞機制進行了完善(EJB2.1),部署與管理工具的增強(JMX),以及新版本的Servlet2.4和JSP2.0使得Web應用更加容易。
四、Tomcat版本比較
Tomcat 3.x
servlet2.2和jsp1.1標準
Tomcat 4.x
Servlet 2.3 和 JSP 1.2 版本
Tomcat 5.x
Servlet 2.4或2.5 和 JSP 2.0 版本
五、JDK版本比較
已發行的版本:
版本號 名稱 中文名 發布日期
JDK 1.1.4 Sparkler 寶石 1997-09-12
JDK 1.1.5 Pumpkin 南瓜 1997-12-13
JDK 1.1.6 Abigail 阿比蓋爾--女子名 1998-04-24
JDK 1.1.7 Brutus 布魯圖--古羅馬政治家和將軍 1998-09-28
JDK 1.1.8 Chelsea 切爾西--城市名 1999-04-08
J2SE 1.2 Playground 運動場 1998-12-04
J2SE 1.2.1 none 無 1999-03-30
J2SE 1.2.2 Cricket 蟋蟀 1999-07-08
J2SE 1.3 Kestrel 美洲紅隼 2000-05-08
J2SE 1.3.1 Ladybird 瓢蟲 2001-05-17
J2SE 1.4.0 Merlin 灰背隼 2002-02-13
J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16
J2SE 1.4.2 Mantis 螳螂 2003-06-26
將發行的版本:
J2SE 5.0 (1.5.0) Tiger 老虎 已發布了Beta版本
J2SE 5.1 (1.5.1) Dragonfly 蜻蜓 未發布
J2SE 6.0 (1.6.0) Mustang 野馬 未發布
一些網友在Xp下安裝了Windows 7(適用于Vista/WS2008)雙系統,試用一段時間之后,新鮮過了,就準備卸載掉Windows 7。下面我把我在xp-windows 7雙系統中卸載windows 7的方法寫下來與大家分享!其中第1-5步網上很多,恕不詳述,本文重點講述第6步,即xp-windows 7(適用于Vista/WS2008)雙系統在卸載windows 7后刪除xp系統主引導分區的殘留文件的詳細步驟(注:本方法也即取得對系統文件完全控制的方法)
啟動電腦進入Xp系統后按以下步驟操作,
1.插入刻好的 Windows 7 安裝光盤(或者用虛擬光驅加載Windows 7鏡像)。
2.依次單擊“開始”按鈕 、“所有程序”、“附件”,右鍵單擊“命令提示符”,然后單擊“用管理員帳戶運行”。
3.鍵入 X:"boot"bootsect.exe /nt52 all /force,然后按 Enter。注:X:"代表你的光驅盤符,或者虛擬光驅盤符。
例如,如果 DVD 驅動器號是 F,則鍵入 F:"boot"bootsect.exe /nt52 ALL /force。
4.彈出 Windows Vista 安裝光盤。
5.重新啟動計算機。
計算機將使用已安裝的以前版本的 Windows 啟動。Windows 7系統的啟動項不見了,Early Version windows也不見了,只剩下Windows xp的啟動項了,基本成功。
6、刪除在啟動盤中的:
*Boot 文件夾
*Boot.BAK
*bootmgr
*BOOTSECT.BAK
7、格式化windows 7所在的分區,或者修改權限后刪除Vista的文件夾。
下面詳述第6步即取得對系統文件(夾)完全控制權限的方法:
新的Vista/WS2008/Win 7系統啟動與XP等之前系統已經有了很大改變,用一個啟動引導程序代替了以前單一的boot.ini文件。刪除系統之后,在C盤XP系統分區留下了Boot 文件夾、Boot.BAK、bootmgr和BOOTSECT.BAK一個文件夾,三個文件。其中boot.bak和bootsect.bak很容易刪除,剩下的boot文件夾和bootmgr文件刪除時,卻會提示出錯信息。查看了文件和文件夾權限,發現已經被鎖定,所以,思路就是通過修改文件夾權限使得當前用戶可以正常刪除文件。以下即為詳細操作步驟:
(1)、首先請用管理員帳戶登錄XP系統。
(2)、進入我的電腦--工具--文件夾選項--查看,把“使用簡單文件共享(推薦)”前面的勾去掉。這樣,你才能進入屬性里的“安全”選項卡,修改文件和文件夾權限。
刪除boot文件夾:
(3)、右鍵點擊boot文件夾--屬性--安全--高級。此時,你所有的權限都無法編輯。
(4)、在“所有者”選項卡中,先將文件夾的所有者移交給“Administrators”組,記得選擇下面的“替換子容器及對象的所有者”。
(5)、再打開“審核”選項卡,將“用在此顯示的那些可以應用到子對象的項目替代所有子對象的審核項目”。點擊“添加”按鈕,在文本框內輸入“administrators”,再點擊右側的“檢查名稱”,“確定”,進入審核項目權限設置,選擇成功和失敗都是“完全控制”,“應用”,退出boot文件夾屬性。可能會有提示讓你配置本地計算機策略,不用管它。
(6)、再次進入boot文件夾屬性--安全,你會發現對于當前管理員帳戶,你已經可以選擇對該文件夾的控制權限了,當然選擇允許“完全控制”。另外,你在“組或用戶名稱”這里還會發現類似S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464這樣的用戶,這應該就是原來的vista/ws2008/win7的用戶。
(7)、還沒完,你還需要再次進入高級--權限選項卡,對于“Administrators”用戶組,將下面的兩個選項都勾上,目的是將對boot文件夾的權限設置,被所有子文件和文件夾所繼承(原來其子文件夾和文件并沒有完全繼承)。確定,退出。
好了,這回,你終于可以把boot文件夾刪除了!
由于操作過程中沒想到貼圖,只有全部操作完成之后,boot文件夾權限相關信息:

圖1 Boot文件夾屬性

圖2 Boot文件夾權限選項卡

圖3 Boot文件夾審核選項卡

圖4 Boot文件夾所有者選項卡
刪除bootmgr文件:
只需要做刪除boot文件夾的(3)、(4)、(5)、(6)步即可,而且由于只有單個文件,簡單很多,不再贅述。
總結:其實對于多分區中安裝多系統來說,經常會遇到這樣的情況。我在以前的本本上裝XP和WS2003雙系統,WS2003想要查看XP分區music中的音樂文件,也需要奪權,只是沒有現在這么麻煩罷了。Anyway,簡單來說,就那么幾步:添加當前XP管理員用戶至審核組以獲得審核權限-->奪取文件所有者權限-->刪除原所有者-->完全控制,并應用到子文件和文件夾-->刪除!
構建一個企業級的應用系統,往往數據庫成為最終的一個負載瓶頸,在我們優化完sql語句、優化完應用程序之后,數據庫的調優必不可少,下面就基于sql查詢的命中率的oracle調優做一個簡單的說明。
1.先檢驗數據庫的查詢命中率,請執行下面的2組sql語句,并且分別記錄修改之前的數值。
第一組sql語句如下:
select 100- (j.value-( a.value+b.value )) /(u.value+v.value-a.value-b.value)*100 as 命中率 from
(select value from v$sysstat where name ='physical reads direct' ) a,
(select value from v$sysstat where name ='physical reads direct (lob)' ) b,
(select value from v$sysstat where name ='physical reads') j,
(select value from v$sysstat where name ='consistent gets') u,
(select value from v$sysstat where name = 'db block gets') v ;
第二組sql語句如下:
select sum(gets) "請求存取數",sum(getmisses) "不命中數" , (1-sum(getmisses)/sum(gets) )*100 "命中率"
from v$rowcache;
2.如果第一組sql語句執行的結果是<90%,則說明需要調整oracle數據庫的內存(SGA的大小),第二組sql語句作為一個參照。
一般經驗:在 1G 的內存的服務器上,我們能分配給SGA的內存大約為400—500M 。若是2G的內存,大約可以分到1G的內存給 SGA,8G 的內存可以分到5G的內存給SGA。
考慮到數據庫服務器的機器內存大小為2G, 可以按照以下腳本執行修改:
【注:請用具有dba權限的用戶登錄“login as sysdba”登錄,可以用pl/sql工具】
--修改前備份一下sqfile
create pfile='d:\oracle\ora9init.ora' from spfile;
--修改共享池大小
alter system set shared_pool_size =256M scope=spfile;
--修改緩沖池大小
alter system set db_cache_size=896M scope=spfile;
--大緩沖池
alter system set large_pool_size=100m scope=spfile;
--修改鏈接進程數
alter system set processes=1500 scope=spfile;
--會話數
alter system set sessions=900 scope=spfile;
--事務數
alter system set transactions=900 scope=spfile;
--打開游標數
alter system set open_cursors =1000 scope=spfile;
3.用pl/sql工具修改了這些參數之后,需要重啟oracle服務。當重啟之后再查執行開始的2組sql語句,對比數值的差異。
前言
近來公司技術,研發都在問我關于內存參數如何設置可以優化oracle的性能,所以抽時間整理了這篇文檔,以做參考.
目的
希望通過整理此文檔,使大家對oracle內存結構有一個全面的了解,并在實際的工作中靈活應用,使oracle的內存性能達到最優配置,提升應用程序反應速度,并進行合理的內存使用.
內容
實例結構
oracle實例=內存結構+進程結構
oracle實例啟動的過程,其實就是oracle內存參數設置的值加載到內存中,并啟動相應的后臺進程進行相關的服務過程。
進程結構
oracle進程=服務器進程+用戶進程
幾個重要的后臺進程:
DBWR:數據寫入進程.
LGWR:日志寫入進程.
ARCH:歸檔進程.
CKPT:檢查點進程(日志切換;上一個檢查點之后,又超過了指定的時間;預定義的日志塊寫入磁盤;例程關閉,DBA強制產生,表空間offline)
LCKn(0-9):封鎖進程.
Dnnn:調度進程.
內存結構(我們重點講解的)
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA:是用于存儲數據庫信息的內存區,該信息為數據庫進程所共享。它包含Oracle 服務器的數據和控制信息,它是在Oracle服務器所駐留的計算機的實際內存中得以分配,如果實際內存不夠再往虛擬內存中寫
我們重點就是設置SGA,理論上SGA可占OS系統物理內存的1/2——1/3
原則:SGA+PGA+OS使用內存<總物理RAM
SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+1MB
1、SGA系統全局區.(包括以下五個區)
A、數據緩沖區:(db_block_buffers)存儲由磁盤數據文件讀入的數據。
大小: db_block_buffers*db_block_size
Oracle9i設置數據緩沖區為:Db_cache_size
原則:SGA中主要設置對象,一般為可用內存40%。
B、共享池:(shared_pool_size):數據字典,sql緩沖,pl/sql語法分析.加大可提速度。
原則:SGA中主要設置對象,一般為可用內存10%
C、日志緩沖區:(log_buffer)存儲數據庫的修改信息.
原則:128K ---- 1M 之間,不應該太大
D 、JAVA池(Java_pool_size)主要用于JAVA語言的開發.
原則:若不使用java,原則上不能小于20M,給30M通常就夠了
E、 大池(Large_pool_size) 如果不設置MTS,主要用于數據庫備份恢復管理器RMAN。
原則:若不使用MTS,5---- 10M 之間,不應該太大
SGA=. db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原則: 達到可用內存的55-58%就可以了.
2、PGA程序全局區
PGA:包含單個服務器進程或單個后臺進程的數據和控制信息,與幾個進程共享的SGA 正相反PGA 是只被一個進程使用的區域,PGA 在創建進程時分配在終止進程時回收.
A、Sort_area_size 用于排序所占內存
B、Hash_area_size 用于散列聯接,位圖索引
這兩個參數在非MTS下都是屬于PGA ,不屬于SGA,是為每個session單獨分配的,在我們的服務器上除了OS + SGA,一定要考慮這兩部分
原則:OS 使用內存+SGA+并發執行進程數*(sort_area_size+hash_ara_size+2M) < 0.7*總內存
實例配置
一:物理內存多大
二:操作系統估計需要使用多少內存
三:數據庫是使用文件系統還是裸設備
四:有多少并發連接
五:應用是OLTP 類型還是OLAP 類型
基本掌握的原則是, db_block_buffer 通常可以盡可能的大,shared_pool_size 要適度,log_buffer 通常大到幾百K到1M就差不多了
A、如果512M RAM 單個CPU db_block_size 是8192 bytes
SGA=0.55*512M=280M左右
建議 shared_pool_size = 50M, db_block_buffer* db_block_size = 200M
具體: shared_pool_size =52428800 #50M
db_block_buffer=25600 #200M
log_buffer = 131072 # 128k (128K*CPU個數)
large_pool_size=7864320 #7.5M
java_pool_size = 20971520 # 20 M
sort_area_size = 524288 # 512k (65k--2M)
sort_area_retained_size = 524288 # MTS 時 sort_area_retained_size = sort_area_size
B、如果1G RAM 單個CPU db_block_size 是8192 bytes
SGA=0.55*1024M=563M左右
建議 shared_pool_size = 100M , db_block_buffer* db_block_size = 400M
具體: shared_pool_size=104857600 #100M
db_block_buffer=51200 #400M
log_buffer = 131072 # 128k (128K*CPU個數)
large_pool_size=15728640 #15M
java_pool_size = 20971520 # 20 M
sort_area_size = 524288 # 512k (65k--2M)
sort_area_retained_size = 524288 # MTS 時 sort_area_retained_size = sort_area_size
C、如果2G 單個CPU db_block_size 是8192 bytes
SGA=0.55*2048M=1126.4M左右
建議 shared_pool_size = 200M , db_block_buffer *db_block_size = 800M
具體: shared_pool_size=209715200 #200M
db_block_buffer=103192 #800M
log_buffer = 131072 # 128k (128K*CPU個數)
large_pool_size= 31457280 #30M
java_pool_size = 20971520 # 20 M
sort_area_size = 524288 # 512k (65k--2M)
sort_area_retained_size = 524288 # MTS 時 sort_area_retained_size = sort_area_size
假定64 bit ORACLE
內存4G
shared_pool_size = 200M , data buffer = 2.5G
內存8G
shared_pool_size = 300M , data buffer = 5G
內存 12G
shared_pool_size = 300M-----800M , data buffer = 8G
參數更改方式
oracle8i:
主要都是通過修改oracle啟動參數文件進行相關的配置
參數文件位置:
d:\oracle\admin\DB_Name\pfile\init.ora
按以上修改以上參數值即可。
Oracle9i:
兩種方式:第一種是修改oracle啟動參數文件后,通過此參數文件再創建服務器參數文件
第二種是直接運行oracle修改命令進行修改。
SQL>alter system set db_cache_size=200M scope=spfile;
SQL>alter system set shared_pool_size=50M scope=spfile;
在Windows系統中的文件壓縮工具winrar功能強大,雖然我們都習慣于用gui的winrar,但是
它也能在命令行方式下面使用,這尤其在企圖讓winrar批量自動壓縮解壓縮的時候有用。
它自帶的幫助也非常的全面,現在從中擇出來一些比較常用的總結一下,以免再找的時候比
較頭暈
1,最簡單的壓縮命令:
winrar a asdf.txt.rar asdf.txt
a的意思是進行壓縮動作,后面第一個參數是被壓縮后的文件名,后綴當然是rar了,最后面
的參數就是要被壓縮的文件名
2,最簡單的解壓縮命令:
winrar e asdf.txt.rar
e的意思是執行解壓縮,解壓縮的文件是后面這唯一的參數,但是這個e解壓縮是把解出來的
文件釋放到當前目錄下面,與asdf.txt.rar文件并列了,因此,更加實用的是下面的帶路徑
解壓縮。
3,帶路徑的解壓縮命令:
winrar x asdf.rar
x的意思是執行帶絕對路徑解壓動作,這會在當前文件夾下創建一個文件夾asdf,把壓縮包
里的文件、文件夾不改動結構釋放到文件asdf里面,就像我們在winrar的圖形界面下看到的
一樣。
4,指定壓縮級別壓縮:
winrar a -m5 asdf.tr.rar asdf.tr
要被壓縮的不再是一個txt文本,而是一個文本格式的十幾M的仿真數據文件,希望能夠最大
程度的壓縮。使用壓縮參數-m5。在winrar中,執行操作是不帶前導-符號的參數,比如“a
”或“x”,而修飾這種動作的參數,使用帶前導符號“-”的參數,比如-m5。其中-m就是
指定壓縮級別的參數,壓縮級別有如下五級:
-m0 存儲 添加到壓縮文件時不壓縮文件。
-m1 最快 使用最快方式(低壓縮)
-m2 較快 使用快速壓縮方式
-m3 標準 使用標準(默認)壓縮方式
-m4 較好 使用較好壓縮方式(較好壓縮,但是慢)
-m5 最好 使用最大壓縮方式(最好的壓縮,但是最慢)
默認的是-m3級別,級別不同,對于大數據量的文本文件壓縮后的文件大小有很大的差異
5,指定壓縮后刪除原文件:
winrar a -m5 -df asdf.tr.rar asdf.tr
用參數-df指定壓縮為asdf.tr.rar壓縮文件后,刪除原文件asdf.tr,也可以是:
winrar m -m5 asdf.tr.rar asdf.tr
這個m的意思是把文件asdf.tr移動入壓縮文件asdf.tr.rar中
6,創建自解壓文件:
winrar s asdf.tr.rar
在gui界面中,創建自解壓文件是有個選項可以直接選擇的。而在命令行中,是分為兩個步
驟的,第一步是用壓縮命令進行壓縮:
winrar a -m5 -df asdf.tr.rar asdf.tr
第二步是用s命令把這個壓縮文件轉化為自解壓文件:
winrar s asdf.tr.rar
轉化后,生成了自解壓文件:asdf.tr.exe
基本上,日常使用這六條就夠了
摘要: 第一章 緒論
1.1 論文的選題背景
以往的基于數理統計方法的應用大多都是通過專用程序來實現的,我們知道,大多數的統計分析技術是基于嚴格的數學理論和高超的應用技巧的,這使得一般的用戶很難從容地掌握它。數據挖掘技術是數理統計分析應用的延伸和發展,假如人們利用數據庫的方式從被動地查詢變成了主動發現知識的話,那么概率論和數理統計可以為我們從數...
閱讀全文