2011年2月21日 星期一

ORACLE 10G 的記憶體

如果你的ORACLE 版本是32位的,如果不做一些配置你是無論如何使用不到1.7G以上內存的。
前兩天公司裡一個軟件系統,需要配置這樣的環境,對於我這樣的ORACLE所謂的高手,有點不知所措,甚至要硬著頭皮去搞定它,
這可是到新公司接到的第一件活。 必須搞定,否則ORACLE DBA就圖有虛名了。 於是馬上上網搜一下,文章果然,但是大都雷同,
而且針對的是ORACLE9I 的。 我在實驗的時候,也把客戶的環境搞雜了,實在慚愧呀。 不過經過一天多的折騰,也算是搞出來了。
軟件環境:
Oracle 10.2.0.1
OS:Windows 2003 Server SP2 32bit
硬件環境:
內存:4G
CPU:Intel Core(TM)2 6300 1.86Ghz
這個環境很重要,特別是ORACLE的版本,跟ORACLE9i的配置肯定是不一樣的。
1) 操作系統配置AWE,主要是修改boot.ini文件
右擊"我的電腦",選擇"屬性"-->高級選項卡,找到“啟動與故障恢復”,單擊“設置”,然後單擊“編輯”,加/PAE選項,修改後的文件如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /noexecute=optout /fastdetect /pae /3GB
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn
2) 配置oracle可以使用的內存,修改註冊表。
找到ORACLE的註冊表項HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1,再你的機器上KEY_OraDb10g_home1不是這個名稱,
添加一個字符串值項:AWE_WINDOW_MEMORY ,這個值是你準備分配給數據庫用的最大內存數(以BYTE為單位),例如你想分配4G,那這個值就是
4*1024*1024*1024


Windows 命令行
Sqlplus "/ as sysdba" REM (如果登陸不進去將當前用戶加入到ora_dba組中)
SQLPLUS>CREATE PFILE='初始化參數文件的路徑' from spfile
SQLPLUS>Shutdown immediate
SQLPLUS>exit
4) 編輯ORACLE初始化參數文件
請用Ulatra editor(當然其他的也可以,但是千萬不要用記事本) 打開在第三步生成的初始化參數文件(最好能備份一下,以便出現差錯的時候還可以使用最初的文件啟動)
第一註銷掉以下行:
sga_max_size
sga_target
DB_CACHE_SIZE
修改或者添加以下參數
*.db_block_buffers=262144 #等於原來的DB_CACHE_SIZE/db_block_size, 例如你希望DB_CACHE_SIZE的大小是2G,則此值是2*1024*1024K/8K= 262144
*.SHARED_POOL_SIZE=419430400 #是以byte為單位的400M(這個參數設置過大會報錯的,因為ORACLE AWE的配置不是針對他的)
*.log_buffer=73400320 #是以byte為單位的70M(這個參數設置過大會報錯的,因為ORACLE AWE的配置不是針對他的)
*.use_indirect_data_buffers=true # 這個參數的含義是我們是通過設置db_block_buffers來計算得到DB_CACHE_SIZE
下列設定,將記憶體空間鎖定在實體記憶體,不會去使用虛擬記憶體
*.pre_page_sga=TRUE
*.lock_sga=TRUE


5) 啟動ORACLE,並重新創建spfile。
Windows 命令行下運行:
Sqlplus "/ as sysdba"
SQLPLUS>Startup pfile='第四步修改後的初始化參數文件的路徑'
SQLPLUS>Create Spfile from pfile='第四步修改後的初始化參數文件的路徑' #你會發現在你的ORACLE HOME/Database目錄下新生成了一個文件SPFILEOracleSID.ORA
SQLPLUS>Shutdown immediate
6) 將第三步生成的文件ORACLE HOME/Database/SPFILEOracleSID.ORA 複製到ORACLE HOME/dbs下
前面兩步的目的是恢復缺省的以spfile參數文件方式啟動數據庫,否則你的設置都將無效
7) 重新啟動Oracle
Windows 命令行
Sqlplus "/ as sysdba"
SQLPLUS>Startup

Oracle 9.2.0.x的AWE_WINDOW_MEMORY的最小值由以下的公式計算:
MIN(AWE_WINDOW_MEMORY)=(4096 * DB_BLOCK_SIZE * _DB_BLOCK_LRU_LATCHES)/8
_DB_BLOCK_LRU_LATCHES = (Max buffer pools * SETS_PER_POOL)
Max Buffer Pools是個常量(等於8),SETS_PER_POOL是個變量,它的大小是由是否啟用VLM(即設定USE_INDIRECT_DATA_BUFFERS=TRUE參數)決定:
SETS_PER_POOL = 2* CPU_COUNT (啟用VLM)
SETS_PER_POOL= CPU Count /2 (不啟用VLM)
例如:
CPU's = 2
DB_BLOCK_SIZE = 8192
Total RAM = 8 GB
SETS_PER_POOL = 2 * CPU_COUNT = 4
_DB_BLOCK_LRU_LATCHES = (max buffer Pools * sets_per_pool) = 8*4 = 32
MIN(AWE_WINDOW_MEMORY)=(4096*DB_BLOCK_SIZE*_DB_BLOCK_LRU_LATCHES)/8 =( 4096 * 8192 * 32) / 8 = 134217728 bytes = 128 MB
這樣在Windows的註冊表中的HKLMSoftwareOracleHomex下的AWE_WINDOW_MEMORY值至少是128M,否則就會提示ORA-27102(out of memory)錯誤。


參考網址:http://blog.csdn.net/george188/archive/2009/10/19/4699231.aspx

2011年2月20日 星期日

Html相對位置

C:\AppServ\www\azole\index.php
C:\AppServ\www\azole\images\test.jpg
C:\AppServ\www\azole\auto\auto.php

對index.php來說,我要引用那個圖片跟link到auto.php,要寫
或是
.\ 是指自己這個檔案夾,所以他的意思是說到自己這個檔案夾裡的images這個檔案夾去抓test.jpg
auto

如果是auto.php要引用,就要這樣寫

..\是上一層的意思,去我的上一層(就到了C:\AppServ\www\azole\)去找images這個檔案夾,在去裡面抓test.jpg這張圖。

大概就是這樣囉,記得是相對於自己的位置就好囉。

Oracle Client中文字碼讀出時變成亂碼的狀況

Oracle Client 的 ODBC連線設定Oracle的連線設定不對,常常會造成中文字碼讀出時變成亂碼的狀況,以下是Client的相關設定流程和步驟 :

(1)安裝Oracle Client
(2)檢查Oracle profile的連線時間設定(注意Time Out會影響連線穩定度)
(3)檢查Oracle帳號權限是否可讀取全部之Owner/Table,且有變更之權限
(4)設定Client端之ODBC連線
(5)檢查ODBC連線之編碼設定是否與Oracle編碼相同
Register 位置
/HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0/NLS_LANG
Value = “TRADITIONAL CHINESE_TAIWAN.ZHT16DBT”
Value = “TRADITIONAL CHINESE_TAIWAN.UTF8”
Value = American.America.US7ASCII

(6)檢查Client端電腦之環境變數
【開始】->【我的電腦】按右鍵->【內容】->【進階】->【環境變數】->【新增】
新增變數名稱 NLS_LANG,變數值設定如下:
Big5設定為 TRADITIONAL CHINESE_TAIWAN.ZHT16DBT
UTF8設定為 TRADITIONAL CHINESE_TAIWAN.UTF8

(7)設定Client端電腦之Oracle tnsnames.ora
開啟C:\Oracle\Ora81\network\ADMIN\tnsnames.ora

(8)以Oracle ODBC test測試Client端之ODBC連線是否正常
(9)Client電腦重新開機(建議)