十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
內(nèi)存結(jié)構(gòu) oracle內(nèi)存結(jié)構(gòu)大致具有四個區(qū):軟件代碼區(qū)、系統(tǒng)全局區(qū)、程序全局區(qū)和排序區(qū)。 1、系統(tǒng)全局區(qū)。(SGA) 系統(tǒng)全局區(qū)為一組由oracle分配的共享數(shù)據(jù)結(jié)構(gòu),它是實例的主要部分,它含有數(shù)據(jù)維護(hù)、SQL語句分析與重做緩存所必須的所有內(nèi)存結(jié)構(gòu),系統(tǒng)全局區(qū)的數(shù)據(jù)是共享的,也就是說,多個進(jìn)程可以在同一時間對SGA中的數(shù)據(jù)進(jìn)行訪問和修改。它包含以下內(nèi)容: 1、數(shù)據(jù)塊緩沖區(qū) 該區(qū)存放最近使用過的數(shù)據(jù)塊,使用LRU(最近最少使用算法)進(jìn)行管理。 2、字典緩沖區(qū) 該區(qū)用于保存數(shù)據(jù)字典中的行,數(shù)據(jù)字典中存放oracle系統(tǒng)管理自身所需的所有信息。該區(qū)也使用LRU算法管理。 3、重做日志緩沖區(qū) 任何事務(wù)在記錄到重做日志之前都先放到該區(qū),數(shù)據(jù)庫系統(tǒng)定期將該區(qū)內(nèi)容寫入到聯(lián)機(jī)重做日志中。 4、SQL共享池 存放所有通過SQL語法分析、準(zhǔn)備執(zhí)行的SQL語句。 5、JAVA池 為JAVA命令提供語法分析。 6、多緩沖池 可以在SGA中創(chuàng)建多個緩沖池,能夠用多個緩沖池把的數(shù)據(jù)集與其他的應(yīng)用程序分開,以減少它們爭奪數(shù)據(jù)塊緩沖區(qū)相同資源的可 能性。 2、程序全局區(qū)(PGA) 包含單個服務(wù)器進(jìn)程或單個后臺進(jìn)程的數(shù)據(jù)和控制信息,與幾個進(jìn)程共享的SGA 正相反PGA 是只被一個進(jìn)程使用的區(qū)域,PGA 在創(chuàng)建進(jìn)程時分配在終止進(jìn)程時回收。 3、排序區(qū) 排序需要內(nèi)存,這部分空間成為排序區(qū),排序區(qū)存在于請求排序的用戶進(jìn)程的內(nèi)存中,該空間的大小為適應(yīng)排序數(shù)據(jù)量的大小,可增長,但受初始化參數(shù)SORT_AREA_SIZER所限制。 4、軟件代碼區(qū) 用于存儲正在執(zhí)行或可以執(zhí)行的程序代碼。 /FONT/SPAN

在芮城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需網(wǎng)站設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),芮城網(wǎng)站建設(shè)費(fèi)用合理。
請教Oracle 11G 自動內(nèi)存管理如何分配內(nèi)存
在11g中oracle引入了自動化內(nèi)存管理(Automatic Memory Management)概念,僅用兩個參數(shù)就能完成oracle的內(nèi)存管理工作。
1 :MEMORY_TARGET:oracle所能使用的最大內(nèi)存,該參數(shù)可以動態(tài)調(diào)整。
2 :MEMORY_MAX_TARGET:MEMORY_TARGET參數(shù)所能動態(tài)設(shè)定的最大值,不能動態(tài)調(diào)整,需要重啟數(shù)據(jù)庫。
至于具體如何分配
正??磾?shù)據(jù)庫服務(wù)器一共有多少內(nèi)存,是否還有其他系統(tǒng)或程序在跑。
可以分配全部內(nèi)存的2/3 到 3/4 給oracle ;oracle自己分配 pga 和 sga 及其內(nèi)部的內(nèi)存結(jié)構(gòu)。
內(nèi)存是影響數(shù)據(jù)庫性能的重要因素,Oracle8i使用靜態(tài)內(nèi)存管理,Oracle
10g使用動態(tài)內(nèi)存管理。所謂靜態(tài)內(nèi)存管理,就是在數(shù)據(jù)庫系統(tǒng)中,無論是否有用戶連接,也無論并發(fā)用量大小,只要數(shù)據(jù)庫服務(wù)在運(yùn)行,就會分配固定大小的內(nèi)存;動態(tài)內(nèi)存管理允許在數(shù)據(jù)庫服務(wù)運(yùn)行時對內(nèi)存的大小進(jìn)行修改,讀取大數(shù)據(jù)塊時使用大內(nèi)存,小數(shù)據(jù)塊時使用小內(nèi)存,讀取標(biāo)準(zhǔn)內(nèi)存塊時使用標(biāo)準(zhǔn)內(nèi)存設(shè)置。
利用邏輯數(shù)據(jù)庫 和物理數(shù)據(jù)庫 來存儲 其中 邏輯數(shù)據(jù)庫主要包括表 ,段,區(qū),oracle數(shù)據(jù)塊。物理數(shù)據(jù)塊 包括 數(shù)據(jù)文件,聯(lián)機(jī)重做日志文件等
一 臨時表語法
臨時表只在Oracle 8i 以及以上產(chǎn)品中支持。
語法:
textarea cols="50"
rows="15" name="code" class="java:showcolumns"create global
temporary table 臨時表名 on commit preserve/delete rows
--preserve:SESSION級的臨時表,delete:TRANSACTION級的臨時表./textarea
SESSION級的臨時表數(shù)據(jù)在整個SESSION都存在,直到結(jié)束此次SESSION;而TRANSACTION級的臨時表數(shù)據(jù)在
TRANACTION結(jié)束后消失,即COMMIT/ROLLBACK或結(jié)束SESSION都會清除TRANACTION臨時表數(shù)據(jù)。
當(dāng)會話退出或者用戶提交commit和回滾rollback事
務(wù)的時候,臨時表的數(shù)據(jù)自動清空,但是臨時表的結(jié)構(gòu)以及元數(shù)據(jù)還存儲在用戶的數(shù)據(jù)字典中。當(dāng)一個會話結(jié)束(用戶正常退出、用戶不正常退出、ORACLE實
例崩潰)或者一個事務(wù)結(jié)束的時候,Oracle對這個會話的表執(zhí)行 TRUNCATE
語句清空臨時表數(shù)據(jù),但不會清空其它會話臨時表中的數(shù)據(jù)。臨時表可以使用觸發(fā)器。
二 臨時表ORACLE數(shù)據(jù)庫與sqlserver的區(qū)別
ORACLE臨時表,transaction或者session結(jié)束,會清空表數(shù)據(jù)。但是表還存在。
SQL SERVER臨時表,存儲在 tempdb 中,當(dāng)不再使用時會自動刪除。
1 SQL SERVER臨時表是一種”內(nèi)存表”,表是存儲在內(nèi)存中的。ORACLE臨時表除非執(zhí)行DROP TABLE,否則表定義會保留在數(shù)據(jù)字典中;
2 SQL SERVER臨時表不存在類似ORACLE臨時表事務(wù)級別上的功能;
3 SQL SERVER本地臨時表(#) 與 ORACLE的會話級別臨時表類似,但是在會話退出的時候,SQL SERVER會自動刪除,ORACLE不會刪除表;
4 SQL SERVER的全局臨時表(##) 是指多個連接共享同一片內(nèi)存。當(dāng)沒有指針引用該內(nèi)存區(qū)域時,SQL SERVER自動釋放全局臨時表。
ORACLE不是一種內(nèi)存中的數(shù)據(jù)庫,所以如果ORACLE類似SQL SERVER 頻繁的對臨時表進(jìn)行建立和刪除,必定會影響性能。所以O(shè)RACLE會保留臨時表的定義直到用戶DROP TABLE。
在ORACLE中,如果需要多個用戶共享一個表(類似
SQL
SERVER的全局臨時表##),則可以利用永久表,并且在表中添加一些可以唯一標(biāo)識用戶的列。利用觸發(fā)器和視圖,當(dāng)用戶退出的時候,根據(jù)該登陸用戶的唯
一信息刪除相應(yīng)的表中的數(shù)據(jù)。 但這種方法給ORACLE帶來了一定量的負(fù)載。
三 使用
1 判斷表不存在就創(chuàng)建表
textarea cols="50" rows="15" name="code" class="java:showcolumns:firstline[1]"create ...
is
temptable_name varchar2(20);
v_count number(1);
begin
temptable_name := 'TEMP_TABLENAME';
select count(*) into v_count from tab where tname = temptable_name;
if(v_count = 0) then
execute immediate 'create table ...';
else
--其他表存在的操作
end if;/textarea
2 注意使用時,可能會產(chǎn)生的錯誤:ORA-08103: object no longer
exists,ORA-14452 attempt to create, alter or drop an index on temporary
table already in use
ORA-14452 : 通過1的判斷,一般會解決該問題。如果在表使用時,執(zhí)行刪除表操作,會出現(xiàn)該錯誤。
ORA-08103 : 使用事務(wù)級的臨時表時,如果,事務(wù)提交前執(zhí)行刪除表操作或者在事務(wù)提交以后使用,就會產(chǎn)生這樣的問題。改成會話級別的可以解決這個問題,但是在會話級別的數(shù)據(jù)的正確性,可能會因為使用連接池,同一個會話中不同操作而產(chǎn)生錯誤。
備份數(shù)據(jù)庫中所有用戶的數(shù)據(jù)
以oracle用戶登陸,執(zhí)行以下命令
# export NLS_LANG = “SIMPLIFIED CHINESE_CHINA.UTF8”
保持與數(shù)據(jù)庫服務(wù)器端一致,這樣在exp導(dǎo)出時,就不會存在字符的轉(zhuǎn)換了,備份最原始的數(shù)據(jù)。