當前位置:首頁 » 文件管理 » oracle資料庫緩存

oracle資料庫緩存

發布時間: 2022-09-27 19:52:59

1. 清除ORACLE資料庫緩存有幾種方法,分別是哪些

10g:
alter system flush buffer_cache

9i:
alter system set events = 'immediate trace name flush_cache'

2. oracle 庫高速緩存和緩沖區緩存 區別

  1. 數據高速緩存跟操作系統的緩存類似,其存儲最近從數據文件中讀取的數據塊,其中的數據可以被所有的用戶所訪問。如當我們利用Select語句從資料庫中查詢員工信息的時候,其首先不是從數據文件中去查詢這個數據,而是從數據高速緩存中去查找,而沒有這個必要再去查詢磁碟中的數據文件了。只有在數據緩存中沒有這個數據的時候,資料庫才會從數據文件中去查詢。Oracle資料庫為什麼要如此設計呢?這是由於資料庫在讀取數據的時候,讀取內存的速度比讀取磁碟的速度要快很多倍,所以這種機制可以提高數據的整體訪問效率。

  2. 緩沖區緩存

    重新啟動資料庫後,系統就會為資料庫分配一些空閑的緩存塊。空閑緩存塊中是沒有任何數據的,他在那邊默默的等著別寫入記錄。當Oracle 資料庫從數據文件中讀取數據後,資料庫就會尋找是否有空閑的緩存塊,以便將數據寫入其中。


  3. 一般來說,資料庫在啟動的時候,就會在內存中預先分配這些緩存塊。所以,Oracle資料庫在啟動的時候,會佔用比較多的內存。但是,這可以免去在實際需要時向內存申請的時間。所以,有時候Oracle資料庫雖然已啟動,內存的佔用率就很高,但是,其後續仍然可以正常運行的原因。而其他資料庫雖然剛啟動的時候內存佔用率不是很高,但是,但系統內存到達80%以上時,在進行數據處理就會受到明顯的影響。

3. 怎麼查看oracle資料庫數據緩沖區大小

日誌緩沖區Log_buffer是Oracle專門用於存入重做日誌的內存區域。
資料庫啟動時,可以看到:
sql> startup
ORACLE 常式已經啟動。
Total System Global Area 85006980 bytes
Fixed Size 453252 bytes
Variable Size 46137344 bytes
Database Buffers 37748736 bytes
Redo Buffers 667648 bytes
資料庫裝載完畢。
資料庫已經打開。

Redo Buffers就是分配給Log_buffer的內存大小。
對日誌緩沖區的大小,可以從下面的視圖中查詢的到:
SQL> select * from v$parameter;
也可以
SQL> show parameter log_buffer
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 524288
從這兒查詢出的數據,是在配置文件中配置的數據,配置文件有:SPFILEORA92.ORA,INITora92.ORA等。
這個值和真實的日誌緩沖區的大小不同。如果要知道真實的Log_buffer的大小,可以用下面的方法查詢:
SQL> select * from v$sgastat where name ='log_buffer';
POOL NAME BYTES
----------- -------------------------- ----------
log_buffer 656384
上面的這個值,是Oracle的SGA實際分配給Log_buffer的大小。
另外,還可以從 v$sga中查詢:
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 453252
Variable Size 46137344
Database Buffers 37748736
Redo Buffers 667648
這個值也就是Oracle啟動時分配給Log_buffer的大小。
那這個值為什麼和實際的大小有差別呢?
SQL> select (667648-656384)/1024 ||'K' from al;
(66
---
11K
相差11K,那這11K干什麼用呢?
這11K是Oracle為了保護Log_buffer,分配出來的日誌保護頁。

4. Oracle如何清理多次select查詢後在內存中的緩存數據

ALTER SYSTEM FLUSH SHARED_POOL

這個語句清除SGA中的 shared pool,shared pool存儲下面的信息:
1、數據字典
2、Shared SQL & PL/SQL,存儲過程、函數、包以及觸發器
但是有一點要清楚的是假如這些對象正在使用時是無法清除的。

5. Oracle資料庫緩存大小怎麼設置,比如要設置一個緩存為8G的。這個數值是怎麼計算的

10g之前可以設置db_cache_size 來指定緩存大小
10g開始可以使用sga_target(當然你也可以不用,但是推薦用),來設定整個共享內存區域大小,包括緩存和共享池等。不需要再單獨設置db cache
11g可以設置memory_target,不光包括了sga,還包括了pga,是所有給oracle的內存的總和,就更方便了。
如果你使用了sga_target或者memory_target,還同時設置了db_cache_size的話,那麼你設置的db_cache_size成為了緩存的最小值。
需要分配給資料庫多大內存取決於你的業務需要,你可以通過db cache advisor的視圖,來估計是否需要更大的緩存。

6. 如何清空oracle緩存

cache是在內存SGA里的,和你的文件系統並沒有關系。

一般oracle容易占文件系統空間的東西:
1、各類mp、trace文件;
2、歸檔、閃迴文件;

我覺得你是不是想問第一個?

另外,如果你的datafile是auto extend on的話,有可能因為數據增大而塞滿所在文件系統!
追問
對對 是要清除歸檔文件,那這個要怎麼清除?

回答
先確定一下歸檔路徑
sqlplus / as sysdba

>show parameter arch;
log_archive_dest_1 LOCATION=+DATADG/

看看這個路徑是不是你要清理的。

然後用rman
rman
>connect target /
>crosscheck archivelog all;
>delete expired archivelog all;
>DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-15'; #刪除15天前的歸檔文件

7. 如何清空oracle緩存

在Oracle9i里,Oracle提供了一個內部事件,用以強制刷新Buffer Cache。
其語法為:
alter session set events 'immediate trace name flush_cache level 1';
或者:
alter session set events = 'immediate trace name flush_cache';
類似的也可以使用alter system系統級設置:
alter system set events = 'immediate trace name flush_cache';
在Oracle10g中,Oracle提供一個新的特性,可以通過如下命令刷新Buffer Cache:

alter system flush buffer_cache;

8. 如何有效實現依賴Oracle的緩存策略

ASP.NET 中的緩存提供了對SQL依賴項的支持,也就是說當SQL SERVER資料庫中的表或行中的數據被更改後,緩存中的頁面就失效,否則,頁面輸出可一直保留在緩存當中。這確實為程序員提供了方便。但微軟一向很小家子氣,只為使用自家產品SQL SERVER的程序員提供了方便,那些用Oracle資料庫的ASP.NET程序員怎麼辦呢?
其實不用著急,因為ASP.NET中的緩存還提供了對文件依賴項的支持,也就是緩存依賴於某個文件,該文件被修改後,緩存中的頁面就失效。只要巧妙利用ASP.NET的文件依賴項緩存策略和Oracle中的觸發器,就可輕松實現依賴Oracle的緩存策略。思路很簡單,先將頁面的緩存策略設置為依賴某一個文件,再為Oracle中需要依賴的表添加一個觸發器,當表中的數據被更改時,修改緩存所依賴的文件中的內容。
下面以一個小例子來具體說明:
試驗目的:Default.aspx頁面的緩存依賴於Oracle資料庫中SCOTT用戶的DEPT表,該表中數據被更改後,緩存中的頁面失效。緩存的過期時間為120秒。
一、設置網站頁面的緩存依賴於文件TextFile.txt詳見System.Web.Caching.Cache類 Asp.NET緩存 各種緩存依賴二、在Oracle資料庫中創建觸發器
1、觸發器被觸發時執行PL/SQL代碼塊。PL/SQL代碼塊直接讀寫操作系統中的文件,需調用內置的utl_file程序包。這需要先修改Oracle的初始化參數文件INIT.ORA,在其中添加參數utl_file_dir,來指定文件的目錄。修改INIT.ORA文件後,需重啟Oracle資料庫,設置的參數才能生效。
在INIT.ORA文件中添加下面一行內容:
utl_file_dir='E:/CSharp/CacheByOracleDependncy'
也可以設置為utl_file_dir=*,不指定具體目錄,即任何目錄都可以。
如果是Oracle 9i資料庫,還有一種方法也能起到同樣的作用:在sys用戶下創建一個directory目錄(實際上是在sys用戶下的dir$表中增加一個對應的OS_PATH),然後將對該directory對象的讀/寫操作的許可權grant給public。
[sql] view plain
create or replace directory FILEPATH as 'E:/CSharp/CacheByOracleDependncy';grant read on directory FILEPATH to public;這里我使用的是第二種方法。
2、為所依賴的表(SCOTT用戶的DEPT表)創建一個觸發器:當DEPT表中的數據更改後,觸發器就會將當前系統時間寫入TextFile.txt文件中。
[sql] view plain
CREATE OR REPLACE TRIGGER
"SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTERINSERT
OR UPDATE
OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLAREfile_handle utl_file.file_type;
BEGIN
--打開文件
file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');--將當前系統時間寫入文件
IF utl_file.is_open(file_handle) THEN
utl_file.put_line(file_handle,to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));END IF;
--關閉文件
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
IF utl_file.is_open(file_handle) THEN
utl_file.fclose(file_handle);
END IF;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
END;
如果應用伺服器和資料庫伺服器不是同一台伺服器可能會遇到項目無法成功訪問文件進行依賴的情況:
解決方法詳見ASP.Net訪問網路驅動器(映射磁碟)

9. Oracle資料庫緩存是怎麼回事

我最近也看了一個視頻,相剋軍老師的。http://www.jiagulun.com/thread-2620-1-1.html 甲骨論的,希望可以幫到你。

熱點內容
源碼種類 發布:2024-10-09 11:20:35 瀏覽:363
android圖片xml 發布:2024-10-09 11:11:08 瀏覽:531
交換機基本配置與遠程登錄怎麼做 發布:2024-10-09 11:02:06 瀏覽:674
伺服器遠程地址怎麼看 發布:2024-10-09 10:43:24 瀏覽:140
隱身訪問訪客會增加嗎 發布:2024-10-09 10:38:29 瀏覽:209
vb代碼如何編譯 發布:2024-10-09 10:22:59 瀏覽:914
sql無效的連接 發布:2024-10-09 10:19:31 瀏覽:70
javaif條件 發布:2024-10-09 10:01:04 瀏覽:958
安卓愛思助手怎麼改戰區 發布:2024-10-09 09:25:29 瀏覽:181
安卓手機用什麼軟體傳軟體到蘋果 發布:2024-10-09 09:11:02 瀏覽:371