修改 memory_target
用oracle用戶登陸,
sqlplus "/as sysdba"
SQL> show parameters target;
show parameters spfile;
alter system set memory_max_target=4G scope=spfile;
alter system set memory_max_target=4G scope=both;
tmpfs /dev/shm tmpfs defaults,size=24G 0 0
-查看當前使用的哪一個參數文件啓動的
SQL> select distinct isspecified from v$spparameter;
ISSPEC
------
FALSE
看第一個值是FALSE仍是TRUE,若是是FALSE,則是pfile,不然則是spfile.
第一行爲TRUE可知,是從spfile啓動的,
有兩行,其中第二行爲FALSE,表示有兩個參數文件,一個是spfile,一個是pfile
最終:修改參數的方法:
先用 mount -o remount,size=16G tmpfs
(不管實際內存大小如何,上述命令都能成功,只是不知道內存過小,oracle是否真能啓動)
或相似 mount -t tmpfs -o remount,size=32G tmpfs /tmp(命令成功,但沒測試oracle啓動正常與否)
修改 tmpfs 大小,使oracle可以啓動成功;
而後:
用oracle用戶lmoracle登陸,執行:
sqlplus "/as sysdba"
create pfile='/pb/lmoracle/a.txt' from memory;
若是oracle已經被正常啓動的狀況下,能夠獲得一個保存全部參數的文件:/pb/lmoracle/a.txt
修改a.txt中的
memory_target=2G
爲
memory_target=24G
在sqlplus中執行shutdown;
退出sqlplus,從新執行下面的命令進入sqlplus:
sqlplus "/as sysdba"
而後用修改後的參數文件啓動數據庫實例:
startup pfile='/pb/lmoracle/a.txt';
看一下參數:
show parameters target;
無誤後,
create spfile from memory;
這樣就把改好的參數文件保存到缺省的spfile中了。
重啓數據庫(或重啓機器)
----------------------------------------------------------------------------------------------
ORA-00845: MEMORY_TARGET not supported on this system報錯解決
Oracle 11g數據庫修改pfile參數後啓動數據庫報錯ora-00845
SQL> startup
ORA-00845: MEMORY_TARGET not supported on this system
在oracle 11g中新增的內存自動管理的參數MEMORY_TARGET,
它能自動調整SGA和PGA,這個特性須要用到/dev/shm共享文件系統,
並且要求/dev/shm必須大於MEMORY_TARGET,若是/dev/shm比MEMORY_TARGET小就會報錯
解決方案
1.初始化參數MEMORY_TARGET或MEMORY_MAX_TARGET不能大於共享內存(/dev/shm),爲了解決這個問題,能夠增大/dev/shm
如:
# mount -t tmpfs shmfs -o size=7g /dev/shm
2.爲了確保操做系統重啓以後能生效,須要修改/etc/fstab文件
shmfs /dev/shm tmpfs size=7g 0
3.若是/dev/shm沒有掛載也會報上面的錯,所認須要確保已經掛載
oracle@aaaprod-db ~]$ df -h
tmpfs 16G 8.9G 7.2G 56% /dev/shm
下面爲一次操做的記錄
[root@aaaprod-db ~]# cat /etc/fstab | grep tmpfs
tmpfs /dev/shm tmpfs defaults,size=8g 0 0
[root@aaaprod-db ~]# mount -o remount,size=16G /dev/shm
[root@aaaprod-db ~]# cat /etc/fstab | grep tmpfs
tmpfs /dev/shm tmpfs defaults,size=8g 0 0
[root@aaaprod-db ~]# vi /etc/fstab
/dev/rootvg/LogVol02 / ext3 defaults 1 1
/dev/rootvg/LogVol01 /tmp ext3 defaults 1 2
/dev/rootvg/lvol0 /ebao ext3 defaults 1 2
/dev/rootvg/lvol1 /backup ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults,size=16g 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/rootvg/LogVol00 swap swap defaults 0 0
"/etc/fstab" 10L, 769C written
[root@aaaprod-db ~]# df -h|grep shm
tmpfs 16G 0 16G 0% /dev/shm
SQL> startup
ORACLE instance started.
Total System Global Area 9420095488 bytes
Fixed Size 2236248 bytes
Variable Size 2315255976 bytes
Database Buffers 7046430720 bytes
Redo Buffers 56172544 bytes
Database mounted.
Database opened.
SQL> exit
---------------------------------------------------------------------------
Oracle調整SGA大小
memory_max_target < shm 切記,不然Oracle實例將啓動失敗,
報 ORA-00845: MEMORY_TARGET not supported on this system 錯,點擊查看shm設置
------------------------------
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 512M
sga_target big integer 512M
SQL>
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
SQL>
sql>alter system set memory_max_target = 15G scope=spfile;
sql>alter system set memory_target = 15G scope=spfile;
shutdown immediate
startup
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 15G
memory_target big integer 15G
shared_memory_address integer 0
---------------------------------------------------------------------------
如何修改oracle SGA大小
在正常狀況下,查詢很是慢。
一、檢查SGA大小,以DBA身份鏈接到oracle數據庫,輸入show sga。
二、若是SGA太小,請修改其大小
修改SGA必須保持的原則:
1).sga_target不能大於sga_max_size,能夠設置爲相等。
2).SGA加上PGA等其餘進程佔用的內存總數必須小於操做系統的物理內存。
作以下操做前,必須備份dbs目錄下的全部文件。
方法一:直接SQL命令行修改:
(若是spfile文件不存在,需先建立create spfile from pfile;)
SQL>alter system set sga_max_size=1024m scope=spfile;
而後須要重啓數據庫
SQL>shutdown immediate
SQL>startup
SQL>show sga;便可看到SGA的大小已經被修改
重啓以後,再修改sga_target
SQL>alter system set sga_target=1024m scope=both;
------------------------------------------------------------------------
設置SGA的原則以及修改它的大小
一,設置SGA的原則:
有時候會碰到在配置SGA中出現了問題,因爲分配的內存過多,數據庫啓不起來了。
內存結構=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
一、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%就能夠了.
二、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就差很少了
例如:
內存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
二,修改SGA的大小:
1.sga_target不能大於sga_max_size,能夠設置爲相等。 2.SGA加上PGA等其餘進程佔用的內存總數必須小於操做系統的物理內存。
作以下操做前,必須備份dbs目錄下的全部文件。
方法一:直接SQL命令行修改:
SQL>alter system set sga_target=1024m scope=spfile;
SQL>alter system set sga_max_size=1024m scope=spfile;
(若是spfile文件不存在,需先建立createspfile from pfile;)
alter system set sga_target=12g scope=spfile;
alter system set sga_max_size=12g scope=spfile;
而後
SQL>shutdown immediate
SQL>startup
SQL>show sga; 便可看到SGA的大小已經被修改
方法二:經過EM修改:
以SYS登錄到EM:管理->(數據庫配置)全部初始化參數—>SPFile->
在此界面能夠直接定義sga_target與sga_max_size
而後重啓數據庫便可!
----------------------------------------------------------------------
cmd下部分操做:,oracle10.2.0g
SQL>conn sys/rezin as sysdba
已鏈接。
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
Oracle 例程已經關閉。
SQL> startup
oracle 例程已經啓動。
TotalSystem Global Area 1073741824 bytes
FixedSize 1253124 bytes
VariableSize 696254716 bytes
Database Buffers 369098752 bytes
RedoBuffers 7135232 bytes
數據庫裝載完畢。
數據庫已經打開。
SQL> show sga;
TotalSystem Global Area 1073741824 bytes ---原來大小
FixedSize 1253124 bytes
VariableSize 696254716 bytes
Database Buffers 369098752 bytes
RedoBuffers 7135232 bytes
SQL> alter system set sga_target=300m scope=spfile;
系統已更改。
SQL>alter system set sga_max_size=280m scope=spfile;
系統已更改。
SQL>shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啓動。
TotalSystem Global Area 314572800 bytes ---修改後的大小
FixedSize 1248720 bytes
VariableSize 96469552 bytes
Database Buffers 209715200 bytes
RedoBuffers 7139328 bytes
數據庫裝載完畢。
數據庫已經打開。
-----------------------------------------------------------------
oracle 11g安裝後,沒法登錄的問題(MEMORY_TARGET not supported on this system)
問題的解決:修改dev/shm的大小,具體和memory的對應關係大小能夠參考oracle官方快速安裝教程中寫的設置
[oracle@r720-2 ~]$ sqlplus
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 1 20:03:07 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to an idle instance.
SQL> startup;
ORA-00845: MEMORY_TARGET not supported on this system
MEMORY_TARGET不知道在哪設置,根據網上資料,設置了系統參數,但依然無效
[root@r720-2 ~]# mount -o remount /dev/shm
[root@r720-2 ~]# df -h /dev/shm/
Filesystem Size Used Avail Use% Mounted on
shmfs 20G 0 20G 0% /dev/shm
想重啓數據庫也報錯~~~
SQL> shutdown immediate;
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
SQL> startup mount
ORA-00845: MEMORY_TARGET not supported on this system
(1)登錄orcl數據庫
SQLPLUS SYS/SYS@orcl AS SYSDBA
(2)設置內存大小
ALTER SYSTEM SET MEMROY_MAX_TARGET=500M SCOPE=SPFILE;(SCOPE=SPFILE表示寫如SPFILE文件,在數據庫重啓後生效)
(3) 設置自動分配的內存大小
ALTER SYSTEM SET MEMORY_TARGET = 500M SCOPE=SPFILE;(表示自動調節PGA和SGA的總大小爲500M)
ALTER SYSTEM SET SGA_TARGET =0 SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET =0 SCOPE=SPFILE;
(4)關閉數據庫
SHUTDOWN IMMEDIATE
(5)重啓數據庫EXP1使配置生效
startup
按下面的方法搞定,假設你的實例名爲orcl
在linux下執行:
一、cd $ORACLE_HOME/dbs
二、sqlplus / as sysdba
三、create pfile from spfile;
而後修改pfile裏面的內容,將memery_target修改成sga_target 和 pga_aggregate_target,一個256M,一個200M。
並去掉開始全部的orcl.的選項。
五、startup pfile='initorcl.ora'
六、create spfile from pfile='initorcl.ora'
七、startup force
MEMORY_TARGET 是 oracle database 11g 繼 10g 加入 sga_target 以後新加的一個內存自動管理參數,
參數嘛,固然是在 pfile 或 spfile 中設置啦。
*.memory_target=54087647232
應該是55G,因而我調整了
vi /etc/fstab--調整共享內存大小
mount /dev/shm--執行可用
df -h /dev/shm--驗證值爲60G,
而後在oracle用戶下startup就把服務器啓動了。java
備註:隨筆中內容來源於網上資料整理,僅供參考。linux