講解Oracle數(shù)據(jù)庫(kù)10g疑難問(wèn)題的解決方法
一、怎樣配置EM使其支持SSL 協(xié)議
10G EM 中的OMS, DBConsole,Agent 都支持SSL 協(xié)議.
具體操作:
◆1. 如果沒(méi)有環(huán)境變量ORACLE_SID,請(qǐng)先配置,或者直接敲入set ORACLE_SID=xxx (UNIX環(huán)境下請(qǐng)根據(jù)不同的shell類型使用不同的語(yǔ)法:setenv, export...)
◆2. 鍵入 emctl secure ,可以看到全部的選項(xiàng):
secure oms
[] [-reset]
secure agent
secure em
secure dbconsole
[]
secure setpwd
secure status [oms url]
secure lock | unlock
◆3. 以配置oms為例
◆3.1 先停掉所有與oms相關(guān)的 服務(wù)(opmnctl stopall)
◆3.2 敲入: emctl secure oms,會(huì)讓你輸入registration password,然后系統(tǒng)會(huì)產(chǎn)生相關(guān)的證書(shū)文件, 如果一切順利的話,系統(tǒng)會(huì)有提示配置成功的信息
◆3.3 重新啟動(dòng)服務(wù)(opmnctl startall)
缺省情況下,7777和4889這兩個(gè)端口是可用的, 配置成secure 模式后,4888端口是支持SSL協(xié)議的. 從$EM_HOMEsysmanconfig目錄下的emoms.properties文件中可以看到配置信息.
◆3.4 檢測(cè)oms是否已經(jīng)運(yùn)行在https協(xié)議下
emctl secure status oms url
注意: URL 要輸入完整,
例如: https://myserver:4888/em/upload/
◆4. Agent, DBconsole的配置基本類似.
◆5. 啟動(dòng)瀏覽器運(yùn)行時(shí),IE會(huì)彈出一個(gè)安裝安全證書(shū)的窗口,按'確認(rèn)'.
二、出現(xiàn)了問(wèn)題,怎樣解決
以DB Control為例, 大致的步驟是這樣的:
◆1. emctl status dbconsole 查看db control 的狀態(tài)
◆2.去 $ORACLE_HOMEhostname_sidsysmanlog目錄下查看相關(guān)日志(emoms.log,emagent.log等)
◆3. 檢查配置文件 emd.properties,emoms.properties
目錄: $ORACLE_HOMEhostname_sidsysmanconfig
◆4. 確保監(jiān)聽(tīng)器工作正常: lsnrctl status
◆5. 10G EM 使用的是配置文件中定義的連接串,而不是直接訪問(wèn)tnsnames.ora .
目錄: $ORACLE_HOMEhostname_sidsysmanconfig
文件: emoms.properties.
參數(shù): oracle.sysman.eml.mntr.emdRepConnectDescriptor
三、修改了監(jiān)聽(tīng)端口, 怎樣保證 DB Control 正常運(yùn)行
◆1. 修改 listener.ora 和tnsnames.ora 這兩個(gè)文件:
tnsnames.ora 中需要加入:
listener_1 =
(ADDRESS = (PROTOCOL = TCP)
(HOST = xxxx)(PORT = 新的端口))
然后啟動(dòng)數(shù)據(jù)庫(kù):
SQL> show parameter local_listener ;
SQL> alter system set local_listener='listener_1' scope=spfile;
重啟數(shù)據(jù)庫(kù)使得修改生效
◆2. 修改 $ORACLE_HOMEhostname_sidsysmanconfig
下的emoms.properties文件:
oracle.sysman.eml.mntr.emdRepPort=新的端口
oracle.sysman.eml.mntr.emdRepConnectDescriptor=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=新的端口)))(CONNECT_DATA=(SERVICE_NAME=xxx)))
◆3. 最后,還要修改 $ORACLE_HOMEhostname_sidsysmanemd
下的targets.xml:
◆4. 重新啟動(dòng)監(jiān)聽(tīng)器和dbconsole 服務(wù).
◆5. 如果嫌上面的操作麻煩,可以用emca這個(gè)命令行工具:
emca -h 查看所有可用的命令
emca -r 跳過(guò)資料檔案庫(kù)的創(chuàng)建.
四、怎樣修改 DB Control 的服務(wù)端口
缺省情況下, DB Control 的端口是5500, 可以參考下面的說(shuō)明更改端口。
如果用戶想改變oms端口,必須改變以下三個(gè)文件,然后重啟db control以使得改變生效:
◆1.編輯$ORACLE_HOME/_/sysman/config/emoms.properties并改變以下參數(shù):
oracle.sysman.emSDK.svlt.ConsoleServerPort
oracle.sysman.emSDK.svlt.ConsoleServerHTTPSPort
◆2.編輯$ORACLE_HOME/_/sysman/config/emd.properties并改變以下參數(shù):
REPOSITORY_URL
emdWalletSrcUrl
◆3.編輯$ORACLE_HOME/oc4j/j2ee/OC4J_DBConsole__/config/http-web-site.xml并改變以下參數(shù):
web-site port
注:請(qǐng)?jiān)谛薷那皞浞荨?
◆五、如何使用'Automatic SGA Management'
Automatic SGA Management 是 10G 引入的新特性之一,將初始化參數(shù)文件中與內(nèi)存管理密切有關(guān)的幾個(gè)參數(shù)抽取出來(lái),交由數(shù)據(jù)庫(kù)去自行管理(由新增加的參數(shù)SGA_TARGET來(lái)管理),在一定程序上能減輕DBA的負(fù)擔(dān).
至于參數(shù)的合理性,還需要結(jié)合AWR Report 去驗(yàn)證.
SGA_TARGET = db_cache_size + db_nk_cache_size(n=2,4,...)
+ db_keep_cache_size + db_recycle_cache_size +
shared_pool_size + java_pool_size + large_pool_size + xxxx
xxx: 是一個(gè)保留值,從目前的實(shí)驗(yàn)來(lái)看,基本是4M
步驟:
◆1.
alter system set sga_target=300m scope=both
create pfile from spfile;
shutdown immediate;
修改init.ora 文件,將這些參數(shù)的值設(shè)成0:
db_cache_size, shared_pool_size, java_pool_size,large_pool_size
◆2. 啟動(dòng)SQLPLUS,以新的pfile文件啟動(dòng)數(shù)據(jù)庫(kù)
SQL> startup pfile='....'
讓我們來(lái)看看調(diào)整的結(jié)果:
SQL> select name, block_size, current_size from v$buffer_pool;
name block_size current_size
-------------------------------------------------------------
KEEP 8192 204
SQL> Select pool, sum(bytes)/1024/1024 as 'M bytes' from v$SGASTAT
group by pool;
pool M bytes
-------------------------------------------------
java pool 4
large pool 4
shared pool 84
205.002403
205.002403=buffer cache + log buffer + fixed sga + all others ...
改動(dòng)java pool的值
SQL> alter system set java_pool_size=20M;
SQL> select name, block_size, current_size,prev_size from v$buffer_pool;
name block_size current_size prev_size
----------------------------------------------------------------------------------------------
KEEP 8192 188 204
SQL> Select pool, sum(bytes)/1024/1024 as 'M bytes' from v$SGASTAT
group by pool;
pool M bytes
-------------------------------------------------
java pool 20
large pool 4
shared pool 84
189.002403
可以看出, db_cache_size的值已經(jīng)被自動(dòng)調(diào)小了.
再把java pool 的值改回去
SQL> alter system set java_pool_size=8M;
SQL> select name, block_size, current_size,prev_size from v$buffer_pool;
name block_size current_size prev_size
-----------------------------------------------------------------------------------
KEEP 8192 188 204
SQL> select name, block_size, current_size,prev_size from v$buffer_pool;
pool M bytes
-------------------------------------------------
java pool 20
large pool 4
shared pool 84
189.002403
這一次, db_cache_size的值沒(méi)有變化 , JAVA_POOL_SIZE的值也沒(méi)有變化
修改large pool的值為16M
SQL> alter system set large_pool_size=16M;
System altered.
SQL> select name,block_size,current_size,prev_size from v$buffer_pool;
NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE
-------------------- ---------- ------------ ---------
DEFAULT 8192 176 188
SQL> Select pool, sum(bytes)/1024/1024 as 'M bytes' from v$sgastat group by pool;
POOL M bytes
------------ ----------
java pool 20
large pool 16
shared pool 84
177.002403
這次,db_cache_size和large_pool_size的值都變了
同樣,調(diào)大shared_pool_size后, db_cache_size會(huì)自動(dòng)減小.
雖然db_nk_cache_size的值不會(huì)隨著workload 的改變而自動(dòng)調(diào)整, 我們還是可以看看手工改動(dòng)db_nk_block_size 的情況
SQL> alter system set db_2k_cache_size=4m;
System altered.
SQL> select name,block_size,current_size,prev_size from v$buffer_pool;
NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE
---------------- ----------------- ------------ ----------
DEFAULT 8192 172 176
DEFAULT 2048 4 0
SQL> alter system set db_2k_cache_size=0;
System altered.
SQL> select name,block_size,current_size,prev_size from v$buffer_pool;
NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE
----------------- ---------------- ------------------ --------------
DEFAULT 8192 176 172
SQL> alter system set db_2k_cache_size=8m;
System altered.
SQL> select name,block_size,current_size,prev_size from v$buffer_pool;
NAME BLOCK_SIZE CURRENT_SIZE PREV_SIZE
-------------------- ---------- ------------ ----------
DEFAULT 8192 168 176
DEFAULT 2048 8 0
結(jié)論: 手工調(diào)整db_nk_cache_size確實(shí)會(huì)影響原有的參數(shù).
最后說(shuō)一點(diǎn): SGA_TARGET參數(shù)與SGA_MAX_SIZE參數(shù)有密切關(guān)聯(lián),基本的原則就是前者的值不能大于后者的值.
總結(jié):設(shè)置了SGA_TARGET參數(shù)后,數(shù)據(jù)庫(kù)會(huì)在這個(gè)范圍內(nèi)自行調(diào)整;但許多情況下, 怎樣合理地設(shè)置這個(gè)參數(shù)仍是DBA需要考慮的問(wèn)題, 他們需要結(jié)合AWR Report等輔助的工具來(lái)分析.( 當(dāng)然,我們可以根據(jù)Advisor的歷史信息而確定一個(gè)比較合理的值)。
一、亂碼問(wèn)題
Redhat RHEL AS3 下安裝 Oracle DB 10g 中文亂碼問(wèn)題
不少兄弟反映在rhel3下安裝oracle10g時(shí)出現(xiàn)亂碼, 其實(shí)在安裝和使用時(shí)出現(xiàn)亂碼的地方有多個(gè), 可以分為三類:
1. 安裝時(shí)的亂碼
2. 一些應(yīng)用程序的亂碼, 比如 dbca, netca
3. 一些基于oc4j的web應(yīng)用的亂碼, 比如 isqlplus, em
造成這些問(wèn)題的原因都是一個(gè), 就是這些程序都使用jdk, 相應(yīng)的jdk(或jre) 使用的字體配置文件 font.properties 中的字體和操作系統(tǒng)的字體或者字體配置文件不匹配. 解決的辦法是把兩者改成一致.
◆1. 下載, 解包 ship.db.cpio.gz, 生成目錄 Disk1
◆2. cd Disk1/stage/Components/oracle.swd.jre/1.4.2.0.0/1/DataFiles/
unzip all_except_bin.jar (這時(shí)生成一個(gè) jre 的目錄)
cd jre/1.4.2/lib/
mv font.properties font.properties.bak
cp font.properties.zh_CN.Redhat8.0 font.properties
cd ../../../
zip -r all_except_bin.jar.new jre/
mv all_except_bin.jar.new all_except_bin.jar
(其實(shí)就是把 font.properties 文件換掉. 這樣安裝時(shí)漢字顯示就沒(méi)有問(wèn)題了)
◆3. 如法炮制, 把Disk1/stage/Components/oracle.jdk/1.4.2.0.0/1/DataFiles/sol_bin.1.1.jar文件里面的font.properties 文件換掉, 創(chuàng)建數(shù)據(jù)庫(kù)和執(zhí)行網(wǎng)絡(luò)配置時(shí)的亂碼就沒(méi)有了. isqlplus 和em 的亂碼也解決了。
用IE登錄Linux服務(wù)器上的em出現(xiàn)的亂碼
不知道大家有沒(méi)有注意到,EM顯示的中文翻譯很是糟糕,up/down 動(dòng)不動(dòng)就翻譯成“向上”“向下”,讓人哭笑不得.很多朋友都說(shuō),干脆給顯示英文算了,可是怎么顯示呢?
好了,現(xiàn)在我們有一種辦法很容易的解決這個(gè)問(wèn)題:
打開(kāi)你的IE瀏覽器,選擇'工具'-->Internet選項(xiàng)-->常規(guī)
選擇“語(yǔ)言”,默認(rèn)只有“中文”,選擇“添加”,加入英語(yǔ)(美國(guó)),調(diào)整順序,把”英語(yǔ)(美國(guó))“放到最上面
OK ,確定。
打開(kāi)你的 http://yoururl:5500/em
問(wèn)題解決了。
二、10g如何更改歸檔模式
◆1. 對(duì)于初始化文件,只需要修改log_archive_dest_n 這個(gè)參數(shù).n=1,2,3,....10, Oracle 缺省會(huì)使用log_archive_dest_10這個(gè)參數(shù)來(lái)使用flash recovery area里面存放的歸檔日志文件,大小由參數(shù)db_recovery_file_dest_size來(lái)決定.
修改:
log_archive_dest_1='location=c:oracle10g...archivelog quota_size=2G'
...
如果歸檔使用flash recovery area, 上面的參數(shù)不需要指定任何值,Oracle 會(huì)自動(dòng)使用db_recovery_file_dest這個(gè)參數(shù)所指定的路徑。
◆2. 啟動(dòng)sqlplus:
startup mount pfile='....'
alter database archivelog;
(如果啟用flashback, alter database flashback on)
alter database open;
archive log list(查看是否運(yùn)行在歸檔模式)
(如果前面的log_archive_dest_n沒(méi)有設(shè)置,則會(huì)顯示USE_DB_RECOVERY_FILE_DEST)
◆3. 怎樣變成noarchivelog 模式
步驟基本同上。
三、用dblink在10G中做create table ..as select * from ..varchar2()的column寬度變成3倍
問(wèn)題描述:例如:varchar2(255)==>varchar(765)
測(cè)試:
◆1. 環(huán)境: 兩臺(tái)機(jī)器都裝的10G的數(shù)據(jù)庫(kù)
◆2. 測(cè)試步驟和結(jié)果:
SQL> conn test1/test1@db10G_server1
SQL> create database link link_server2
connect to test1 identified by test1
using 'db10G_server2'
SQL> conn test1/test1@db10G_server2
SQL> create table test1_t1 as select * from all_objects
where rownum<=3000;
SQL> desc test1_t1;
Name Null? Type
---------------------------------------------------------------
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(30)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
SQL> conn test1/test1@db10G_server1
SQL> create table test1_linkt1 as
select * from test1_t1@link_server2
SQL> desc test1_linkt1
Name Null? Type
----------------------------------------- -------- ----------------
OWNER VARCHAR2(60)
OBJECT_NAME VARCHAR2(60)
SUBOBJECT_NAME VARCHAR2(60)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(38)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(38)
STATUS VARCHAR2(14)
TEMPORARY VARCHAR2(2)
GENERATED VARCHAR2(2)
SECONDARY VARCHAR2(2)
表結(jié)構(gòu)一樣,但是列的長(zhǎng)度確實(shí)變了, 通過(guò)dblink創(chuàng)建的表的varchar2列的長(zhǎng)度是原表的兩倍
再來(lái)看看字符集
◆1.Server1上的數(shù)據(jù)庫(kù)字符集
SQL> column value format A20
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
value
--------------
ZHS16GBK
◆2. Server2上的數(shù)據(jù)庫(kù)字符集
SQL> conn test1/test1@db10G_server2
SQL> column value format A20
SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET';
value
--------------
AL32UTF8
四、在10g不支持的Linux發(fā)行版上安裝10g的解決方法
正常安裝的10g只支持Red Hat Enterprise Linux 2.1 and 3, and on UnitedLinux 1.0。如果是其它的版本,比如fedora,rh9等,10g將會(huì)說(shuō)不支持,而不允許安裝,解決方法如下:
◆1.運(yùn)行runInstaller -ignoreSysPrereqs,這樣會(huì)跳過(guò)檢查
◆2.修改/etc/redhat-release文件,讓10g認(rèn)為自己處于支持的操作系統(tǒng)中,運(yùn)行下面的命令即可
su - root
cp /etc/redhat-release /etc/redhat-release.backup
cat > /etc/redhat-release << EOF
Red Hat Enterprise Linux AS release 3 (Taroon)
EOF
安裝完畢,再將那個(gè)文件還原:
su - root
cp /etc/redhat-release.backup /etc/redhat-release
◆3.同樣的思路,我們可以去修改Oracle 的install/oraparam.ini文件:
[Certified Versions]
Linux=redhat-2.1,UnitedLinux-1.0,redhat-3
把這個(gè)屏蔽掉,或者是添加新的內(nèi)容:
[Certified Versions]
Linux=redhat-2.1,UnitedLinux-1.0,redhat-3
[Linux-redhat-2.1-optional]
TEMP_SPACE=80
SWAP_SPACE=150
MIN_DISPLAY_COLORS=256
[UnitedLinux-1.0-optional]
TEMP_SPACE=80
SWAP_SPACE=150
MIN_DISPLAY_COLORS=256
[Linux-redhat-3.0-optional]
TEMP_SPACE=80
SWAP_SPACE=150
MIN_DISPLAY_COLORS=256
對(duì)這個(gè)地方定制一下就可以了。
注:有興趣的朋友不妨測(cè)試一下,其實(shí)在這個(gè)地方可以定制很多東西的,但是不推薦在正式的應(yīng)用中這么做。
