一. Oracle OLAP 組件 說明
十年的夏邑網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整夏邑建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“夏邑網(wǎng)站設(shè)計”,“夏邑網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
有關(guān)Oracle 的所有組件的說明,參考:
Oracle8i/9i/10g/11g 組件(Components) 說明
聯(lián)機分析處理OLAP(On-Line Analytical Processing), 也稱DSS決策支持系統(tǒng)。OLAP是數(shù)據(jù)倉庫系統(tǒng)的主要應(yīng)用,支持復(fù)雜的分析操作,側(cè)重決策支持,并且提供直觀易懂的查詢結(jié)果。
OLAP是Oracle數(shù)據(jù)庫企業(yè)版的一個多維分析引擎,采用oracle數(shù)據(jù)庫來存儲OLAP數(shù)據(jù)和元數(shù)據(jù)。
在OLAP中,語句的執(zhí)行量不是考核標(biāo)準(zhǔn),因為一條語句的執(zhí)行時間可能會非常長,讀取的數(shù)據(jù)也非常多。所以,在這樣的系統(tǒng)中,考核的標(biāo)準(zhǔn)往往是磁盤子系統(tǒng)的吞吐量(帶寬),如能達到多少MB/s的流量。
更多內(nèi)容參考:
OracleOLAP 與 OLTP 介紹
在添加OLAP 組件的情況下,如果我們做32到64位的DB遷移,都會需要重建OLAP 組件,否則就會導(dǎo)致大量的無效對象的存在。 而這個重建工作又需要近40分鐘,所以是個很耗時間的過程。
Oracle OLAP是Oracle企業(yè)版的一個可選件,由于將OLAP引擎完全集成進了Oracle數(shù)據(jù)庫,所以,所有數(shù)據(jù)和元數(shù)據(jù)都是從Oracle數(shù)據(jù)庫內(nèi)部進行存儲和管理的,以提供高度可伸縮性、強健的管理環(huán)境及工業(yè)級可用性和安全性。
1.1 OLAP 組件
可以使用如下SQL 查看OLAP組件的狀態(tài)和版本信息:
SQL column comp_name format a35
SQL col version for a15
SQL set wrap off
--Oracle11g:
SQL select comp_name, version, statusfrom dba_registry where comp_name like '%OLAP%';
COMP_NAME VERSION STATUS
-------------------------------------------------- ----------------------
OLAP Analytic Workspace 11.2.0.3.0 INVALID
Oracle OLAP API 11.2.0.3.0 VALID
OLAP Catalog 11.2.0.3.0 VALID
--Oracle 10g:
SYS@ wangou select comp_name, version,status from dba_registry where comp_name like '%OLAP%';
COMP_NAME VERSION STATUS
-------------------------------------------------- ----------------------
OLAP Analytic Workspace 10.2.0.5.0 VALID
Oracle OLAP API 10.2.0.5.0 VALID
OLAP Catalog 10.2.0.5.0 VALID
Oracle OLAP主要包括以下組件:
(1)OLAP Analytic Engine
Oracle的OLAP分析引擎是一個基于多維模型的MOLAP引擎,運行在Oracle內(nèi)核中,因此擁有良好的性能。
(2)Analytic Workspace
分析工作區(qū)中實際存儲多維模型的數(shù)據(jù)。一個Analytic Workspace存儲為一個關(guān)系表,分析工作區(qū)中的不同對象存儲為表中的一行(LOB格式)。分析工作區(qū)甚至可以存儲在分區(qū)表中,以提供更好的并發(fā)性能。
(3)OLAP DML
OLAP DML是Analytic Workspace的原始操作語言,包括關(guān)于Analytic Workspace的數(shù)據(jù)定義語言(DDL)和數(shù)據(jù)操作語言(DML)。對于Analytic Workspace的所有操作方式,比如GUI工具,java和SQL等方式,最終都要轉(zhuǎn)化為Oracle DML語言。
(4)SQL Interface to OLAP
提供使用SQL操作AnalyticWorkspace的接口,該接口使用PL/SQL實現(xiàn)。
(5)Analytic Workspace Java API
提供使用Java操作AnalyticWorkspace的接口。在GUI工具Analytic Workspace Manager中使用的就是該接口。
(6)OLAP API
Oracle OLAP的一個Java編程接口,支持OracleBI Bean。
1.2 Oracle OLAP的兩個客戶端工具:
(1)Analytic Workspace Manager
這是Oracle提供的一個操作AnalyticWorkspace的一個圖形工具。使用該工具可以快速的完成諸如定義數(shù)據(jù)的邏輯多維模型、創(chuàng)建多維數(shù)據(jù)到關(guān)系數(shù)據(jù)的映射、裝載和聚合數(shù)據(jù)等任務(wù)。
(2)OLAP Worksheet
OLAP Worksheet提供了操作Analytic Workspace的一個交互式環(huán)境。有點類似于Oracle數(shù)據(jù)庫的SQLPLUS工具。
1.3 Active Catalog View(活動目錄視圖)
Active CatalogView,活動目錄視圖,是Oracle為OLAP用戶提供的一系列動態(tài)視圖,用于提供分析工作區(qū)(Analytic Workspace)中的對象信息。Analytic workspace是用戶session和Oracle OLAP引擎交互所必須的接口,也是dimension,cube的對象的容器。
在Oracle OLAP中,Analytic workspace的概念有點類似與數(shù)據(jù)庫中的schema,也是一組相關(guān)對象的集合。但是Analytic workspace會使用一個名為aw$name的table來實際的存儲analyticworkspace中的對象 (dimension,cube,level,attribute等)。有時候,我們可能需要將一個analytic workspace從一個系統(tǒng)遷移到另外一個系統(tǒng),也可能需要將一個analytic workspace的內(nèi)容遷移到另外一個analytic workspace中,利用Analytic Workspace Manager可以在圖形界面下完成該任務(wù),首先將一個aw導(dǎo)出為EIF文件,然后將EIF導(dǎo)入到另外一個aw即可。
OLAP 多維模型中的一些主要對象,如dimension(維度),measure(度量),cube(數(shù)據(jù)立方體),hierarchy(層 次),level(層),attribute(屬性)等,都有對應(yīng)的活動目錄視圖,根據(jù)視圖的名字基本可以判斷該視圖中的內(nèi)容,Oracle10g所有的 活動目錄視圖都以ALL_OLAP2_AW開頭:
(1) ALL_OLAP2_AWS
(2) ALL_OLAP2_AW_ATTRIBUTES
(3) ALL_OLAP2_AW_CATALOGS
(4) ALL_OLAP2_AW_CATALOG_MEASURES
(5) ALL_OLAP2_AW_CUBES
(6) ALL_OLAP2_AW_CUBE_AGG_LVL
(7) ALL_OLAP2_AW_CUBE_AGG_MEAS
(8) ALL_OLAP2_AW_AGG_OP
(9) ALL_OLAP2_AW_CUBE_AGG_SPECS
(10) ALL_OLAP2_AW_CUBE_DIM_USES
(11) ALL_OLAP2_AW_CUBE_MEASURES
(12) ALL_OLAP2_AW_DIMENSIONS
(13) ALL_OLAP2_AW_DIM_HIER_LVL_ORD
(14) ALL_OLAP2_AW_DIM_LEVELS
(15) ALL_OLAP2_AW_PHYS_OBJ
(16) ALL_OLAP2_AW_PHYS_OBJ_PROP
除了活動目錄視圖,Oracle也提供了幾個動態(tài)性能視圖,用于展示OLAP對象的一些統(tǒng)計信息,這些DynamicPerformance View都以V$AW開頭:
(1) v$aw_aggregate_op
(2) v$aw_allocate_op
(3) v$aw_calc
(4) v$aw_longops
(5) v$aw_olap
(6) v$aw_session_info
以上理論知識轉(zhuǎn)自ningoo的blog:
二. 添加刪除OLAP 組件
MOS: How To Remove Or To Reinstall TheOLAPOption To 10g And 11g [ID 332351.1]
這里提供了2種解決方法:
2.1 在ORACLE_HOME 級別重建
2.1.1 刪除OLAP
備份DB和oraInventory,在關(guān)閉ORACLE_HOME上的所有Instance,使用Universal Installer (OUI) 移除ORACLE_HOME的OLAP 選項。在OUI 中選擇升級已經(jīng)存在的db,在selectoptions 選項可以控制是否啟用OLAP。如下圖:
在Unix 和Linux 平臺上,也可以直接relink olap_off 的方式來刪除,這樣就避免使用OUI。
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk olap_off
make -f ins_rdbms.mk ioracle
非注冊的OLAP將不在db 的banner 中限制,同時v$option 也會顯示為FALSE.
2.1.2 重新安裝OLAP
1)在OUI中添加OLAP 組件,參考上圖。
2)添加完畢之后執(zhí)行如下腳本,在db 級別進行添加。
sqlplus /nolog
SQL conn /as sysdba
SQL spool add_olap.log
SQL @?/olap/admin/olap.sql SYSAUX TEMP;
SQL @?/rdbms/admin/utlrp.sql
SQL spool off
2.2 在Database 級別重建
2.2.1 刪除OLAP
--在dbserver 上開一個session,設(shè)定相關(guān)的變量,并用sys 用戶執(zhí)行如下腳本:
ORACLE_HOME=your_oracle_home
ORACLE_SID=your_db_sid
PATH=$ORACLE_HOME/bin:$PATH
sqlplus /nolog
SQL conn / as sysdba
---- Remove OLAP Catalog
SQL @?/olap/admin/catnoamd.sql
---- Remove OLAP API
SQL @?/olap/admin/olapidrp.plb
SQL @?/olap/admin/catnoxoq.sql
---- Deinstall APS - OLAP AW component
SQL @?/olap/admin/catnoaps.sql
SQL @?/olap/admin/cwm2drop.sql
---- Recompile invalids
SQL @?/rdbms/admin/utlrp.sql
catnoamd.sqlusedabove will drop the OLAPSYS schema (which is completely OLAP specific).
--catnoamd.sql 腳本用來drop OLAPSYS 用戶。
cwm2drop.sqlneedsto be run only in 11g. In 10g, catnoamd.sql already calls it.
--cwm2drop.sql 只需要在11g中執(zhí)行。在10g中,catnoamd.sql腳本中已經(jīng)包含了該腳本,所以不用執(zhí)行。
If you connectto the database in SQLPLUS, the banner still shows the OLAPoption,this happensbecause the Oracle executable is still aware of OLAP, it islinked with OLAP, andalso the OLAP files are still present in the ORACLE_HOME.
Once runningthedeinstall scripts, the utlrp.sql could report invalid objects with SYSandPUBLIC owners. If so, the following SQL can be used to report more detailsonthat:
--刪除之后,可能導(dǎo)致一些無效的對象,可以使用如下SQL 來查看具體信息:
SQL select owner,object_name,object_type, status from dba_objects where status='INVALID';
You could getsome invalid objects under SYS and PUBLIC owner, and they are the oldduplicate OLAPSYS objects copied under these schemas when Olap has beeninstalledpreviously.
Generally,the Olap objects are named with context like %OLAP%, %AWM%, or other Olap wordkeys intheir "object_name" field, however, if it needs a help torecognizethem, then please contact Oracle Support and create a ServiceRequest toget assistance for this question.
Notethat catnoadm.sql could fail from 10.1.0.5 to 11.1.0.7 release.
Due to the fact that it refers to three scripts which don't get shipped until 11.2this scriptwill fail.
Besides that it will error on 7 non-existing synonyms to drop.
Prior 11.2, execute thesethree drop synonym statements:
--在11.2 之前,需要執(zhí)行如下腳本:
SQL drop public synonym OlapFactView;
SQL drop public synonym OlapDimView;
SQL drop public synonym DBMS_ODM;
If therearefurther invalid OLAP specific objects after the above removal steps,pleaseconsult Note1060023.1, Note565773.1
If you do notwant to install OLAP into a newly created database, then in theDatabaseConfiguration Assistant (dbca), select a custom database template anduncheckOracle OLAP in the Database Components wizard step.
2.2.2 添加OLAP
Assuming that youcreated your database manually or via DBCA, add the OLAP option to anexistingEnterprise Edition Database.
--假設(shè)我們在ORACLE_HOME級別添加了OLAP。
Then openaterminal session on the database server machine, set ORACLE_HOME,ORACLE_SIDenvironment variables, and execute some script. as user SYS AS SYSDBA,detailsbelow:
--在dbserver 端用SYS 用戶執(zhí)行如下腳本,來創(chuàng)建olap。
ORACLE_HOME=your_oracle_home
ORACLE_SID=your_db_sid
PATH=$ORACLE_HOME/bin:$PATH
sqlplus /nolog
SQL conn /as sysdba
SQL @?/olap/admin/olap.sql SYSAUX TEMP;
--這個腳本需要30+分鐘
三. 驗證無效對象和組件狀態(tài)
SQL select count(*) from dba_invalid_objects;
COUNT(*)
----------
67
如果有無效對象,使用如下腳本編譯:
SQL @?/rdbms/admin/utlrp.sql
SQL col comp_id for a15
SQL col version for a15
SQL col comp_name for a30
SQL select comp_id,comp_name,version,status from dba_registry;
COMP_ID COMP_NAME VERSION STATUS
--------------------------------------------- --------------- -----------------
EM Oracle Enterprise Manager 11.2.0.3.0 VALID
AMD OLAP Catalog 11.2.0.3.0 VALID
SDO Spatial 11.2.0.3.0 VALID
ORDIM Oracle Multimedia 11.2.0.3.0 INVALID
XDB Oracle XML Database 11.2.0.3.0 INVALID
CONTEXT Oracle Text 11.2.0.3.0 VALID
ODM Oracle Data Mining 11.2.0.3.0 VALID
EXF Oracle Expression Filter 11.2.0.3.0 VALID
RUL Oracle Rules Manager 11.2.0.3.0 VALID
OWM Oracle Workspace Manager 11.2.0.3.0 VALID
CATALOG Oracle Database Catalog Views 11.2.0.3.0 VALID
COMP_ID COMP_NAME VERSION STATUS
--------------------------------------------- --------------- -----------------
CATPROC Oracle Database Packages and T11.2.0.3.0 INVALID
JAVAVM JServer JAVA Virtual Machine 11.2.0.3.0 VALID
XML Oracle XDK 11.2.0.3.0 VALID
CATJAVA Oracle Database Java Packages 11.2.0.3.0 VALID
APS OLAP Analytic Workspace 11.2.0.3.0 INVALID
XOQ Oracle OLAP API 11.2.0.3.0 VALID
17 rows selected.
如何配置才能使客戶端連到數(shù)據(jù)庫:\x0d\x0a\x0d\x0a要使一個客戶端機器能連接oracle數(shù)據(jù)庫,需要在客戶端機器上安裝oracle的客戶端軟件,唯一的例外就是java連接數(shù)據(jù)庫的時候,可以用 \x0d\x0ajdbc \x0d\x0athin模式,不用裝oracle的客戶端軟件。加入你在機器上裝了oracle數(shù)據(jù)庫,就不需要在單獨在該機器上安裝oracle客戶端了,因為裝 \x0d\x0aoracle數(shù)據(jù)庫的時候會自動安裝oracle客戶端。\x0d\x0a 用過sql \x0d\x0aserver數(shù)據(jù)庫然后又用oracle的新手可能會有這樣的疑問:問什么我用sql server的時候不用裝sql \x0d\x0aserver的客戶端呢?原因很簡單,sql server也是microsoft的,它在操作系統(tǒng)中集成了sql \x0d\x0aserver客戶端,如果microsoft與oracle有協(xié)議,將oracle客戶端也集成到操作系統(tǒng)中,那我們也就不用在客戶端機器裝oracle\x0d\x0a 客戶端軟機就可訪問數(shù)據(jù)庫了,不過,這好像是不可能實現(xiàn)的事情。\x0d\x0a 也有的人會問:為什么在sql \x0d\x0aserver中沒有偵聽端口一說,而在oracle中要配置偵聽端口?其實sql \x0d\x0aserver中也有偵聽端口,只不過microsoft將偵聽端口固定為1433,不允許你隨便改動,這樣給你一個錯覺感覺sql \x0d\x0aserver中沒有偵聽端口,咳,microsoft把太多的東西都封裝到黑盒子里,方便使用的同時也帶來的需要副作用。而oracle中的偵聽端口直接\x0d\x0a 在配置文件中,允許隨便改動,只不過無論怎樣改動,要與oracle服務(wù)器端設(shè)置的偵聽端口一致。\x0d\x0a好,言歸正傳,我們?nèi)绾巫霾拍苁箍蛻舳藱C器連接到oracle數(shù)據(jù)庫呢?\x0d\x0aA. 安裝相關(guān)軟件\x0d\x0aB. 進行適當(dāng)?shù)呐渲肻x0d\x0a\x0d\x0aA.在適當(dāng)?shù)奈恢冒惭b適當(dāng)?shù)能浖篭x0d\x0a在客戶端機器:\x0d\x0a1.在客戶端機器上安裝ORACLE的Oracle Net通訊軟件,它包含在oracle的客戶端軟件中。\x0d\x0a2.正確配置了sqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN=DB_DOMAIN\x0d\x0a一般情況下我們不用NAMES.DEFAULT_DOMAIN參數(shù)。如果想不用該參數(shù)用#注釋掉或?qū)⒃搮?shù)刪除即可,對于NAMES.DIRECTORY_PATH參數(shù)采用缺省值即可,對于NAMES.DEFAULT_DOMAIN參數(shù)有時需要注釋掉,在下面有詳細解釋。\x0d\x0a3.正確配置了tnsname.ora文件\x0d\x0a\x0d\x0a在服務(wù)器端機器:\x0d\x0a1.保證listener已經(jīng)啟動\x0d\x0a2.保證數(shù)據(jù)庫已經(jīng)啟動。\x0d\x0a如果數(shù)據(jù)庫沒有啟動,用:\x0d\x0aOracle 9i:\x0d\x0adossqlplus “/ as sysdba”\x0d\x0asqlplus startup\x0d\x0aOracle 8i:\x0d\x0adossvrmgrl\x0d\x0asvrmgrlconnect internal\x0d\x0asvrmgrlstartup\x0d\x0a命令啟動數(shù)據(jù)庫\x0d\x0a如果listener沒有啟動,用:\x0d\x0alsnrctl start [listener name]\x0d\x0alsnrctl status [listener name]\x0d\x0a命令啟動listener\x0d\x0aB.進行適當(dāng)?shù)呐渲肻x0d\x0a如何正確配置tnsname.ora文件:\x0d\x0a\x0d\x0a可\x0d\x0a 以在客戶端機器上使用oracle Net Configuration Assistant或oracle Net \x0d\x0aManager圖形配置工具對客戶端進行配置,該配置工具實際上修改tnsnames.ora文件。所以我們可以直接修改tnsnames.ora文件,\x0d\x0a 下面以直接修改tnsnames.ora文件為例:\x0d\x0a該文件的位置為: ?\network\admin\tnsnames.ora (for windows)\x0d\x0a?/network/admin/tnsnames.ora (for unix)\x0d\x0a此處,假設(shè)服務(wù)器名為testserver,服務(wù)名為orcl.testserver.com,使用的偵聽端口為1521,則tnsnams.ora文件中的一個test網(wǎng)絡(luò)服務(wù)名(數(shù)據(jù)庫別名)為:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=\x0d\x0a(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此處的笑臉為)。\x0d\x0a 紅色的內(nèi)容為需要根據(jù)實際情況修改的內(nèi)容,現(xiàn)解釋如下:\x0d\x0a PROTOCOL:客戶端與服務(wù)器端通訊的協(xié)議,一般為TCP,該內(nèi)容一般不用改。\x0d\x0a\x0d\x0aHOST:數(shù)據(jù)庫偵聽所在的機器的機器名或IP地址,數(shù)據(jù)庫偵聽一般與數(shù)據(jù)庫在同一個機器上,所以當(dāng)我說數(shù)據(jù)庫偵聽所在的機器一般也是指數(shù)據(jù)庫所在的機 \x0d\x0a \x0d\x0a器。在UNIX或WINDOWS下,可以通過在數(shù)據(jù)庫偵聽所在的機器的命令提示符下使用hostname命令得到機器名,或通過ipconfig(for\x0d\x0a WINDOWS) or ifconfig(for \x0d\x0aUNIX)命令得到IP地址。需要注意的是,不管用機器名或IP地址,在客戶端一定要用ping命令ping通數(shù)據(jù)庫偵聽所在的機器的機器名,否則需要在\x0d\x0a hosts文件中加入數(shù)據(jù)庫偵聽所在的機器的機器名的解析。\x0d\x0a\x0d\x0aPORT:數(shù)據(jù)庫偵聽正在偵聽的端口,可以察看服務(wù)器端的listener.ora文件或在數(shù)據(jù)庫偵聽所在的機器的命令提示符下通過lnsrctl status [listener name]命令察看。此處Port的值一定要與數(shù)據(jù)庫偵聽正在偵聽的端口一樣。\x0d\x0a SERVICE_NAME:在服務(wù)器端,用system用戶登陸后,sqlplus show parameter service_name命令察看。\x0d\x0a 如何利用配置的網(wǎng)絡(luò)服務(wù)名連接到數(shù)據(jù)庫:\x0d\x0a 用sqlplus程序通過test網(wǎng)絡(luò)服務(wù)名進行測試,如sqlplus system/manager@test。\x0d\x0a 如果不能連接到數(shù)據(jù)庫,則在tnsname.ora文件中的test網(wǎng)絡(luò)服務(wù)名(net \x0d\x0aservice)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN參數(shù)的值,此處我的參數(shù)值為 \x0d\x0atestserver.com,將其加到網(wǎng)絡(luò)服務(wù)名后面,修改后的tnsname.ora中關(guān)于該網(wǎng)絡(luò)服務(wù)名的內(nèi)容為:\x0d\x0a\x0d\x0a 什么情況下會引起oracle自動設(shè)置NAMES.DEFAULT_DOMAIN參數(shù)?\x0d\x0a \x0d\x0a 出現(xiàn)這種情況的典型環(huán)境為windows的客戶端的‘我得電腦à屬性à計算機名à更改à其它?à此計算機的主DNS后綴’中設(shè)置了‘primary \x0d\x0a dns \x0d\x0asuffix’,因為在這種情況下安裝客戶端時,會在sqlnet.ora文件中自動設(shè)置NAMES.DEFAULT_DOMAIN參數(shù),或許當(dāng)把計算機\x0d\x0a 加入域中安裝oracle客戶端時也會出現(xiàn)這種情況,有條件的話大家可以試一下。\x0d\x0a\x0d\x0a我在設(shè)置oracle的客戶端時一般手工修改tnsnames.ora文件,但是還有許多人喜歡用圖形工具配置,該圖形工具最終還是修改tnsnames.ora文件,但是它有時會引起其它的問題:\x0d\x0a\x0d\x0a在用oracle的圖形配置軟件'net assistant'或‘Net Configuration \x0d\x0aAssistant’配置網(wǎng)絡(luò)服務(wù)名時,假如已經(jīng)設(shè)置了‘primary dns \x0d\x0asuffix’,但是在圖形配置軟件中寫的網(wǎng)絡(luò)服務(wù)名的名字中沒有‘primary dns \x0d\x0asuffix’,如只是寫了test,則圖形配置軟件會自動在后面加上‘primary dns \x0d\x0asuffix’,使之變?yōu)閠est.testserver.com,并存在tnsnames.ora中,而不管你的sqlnet.ora文件中是否有 \x0d\x0aNAMES.DEFAULT_DOMAIN參數(shù)。此時,用圖形工具進行測試連接是通過的,但是假如此時sqlnet.ora文件中沒有 \x0d\x0aNAMES.DEFAULT_DOMAIN參數(shù),則你在使用網(wǎng)絡(luò)服務(wù)名時應(yīng)該使用在tnsnames.ora中的 \x0d\x0atest.testserver.com,而不是你在圖形配置軟件中鍵入的test。解決的辦法為:\x0d\x0a可以在sqlnet.ora文件中設(shè)置NAMES.DEFAULT_DOMAIN= testserver.com,這時你可以用test或test.testserver.com連接數(shù)據(jù)庫\x0d\x0a在sqlnet.ora文件中不設(shè)置NAMES.DEFAULT_DOMAIN參數(shù),在tnsnames.ora文件中將test.testserver.com中的.testserver.com去掉,這時你可以用test連接數(shù)據(jù)庫。\x0d\x0a\x0d\x0a關(guān)于為什們在網(wǎng)絡(luò)服務(wù)名后面加db_domain參數(shù),需要了解sql*plus連接數(shù)據(jù)庫的原理,我在后面解決12154常見故障中給出了詳細的說明。\x0d\x0a\x0d\x0a如果上面的招數(shù)還不奏效的話,只好用一下乾坤大挪移了。\x0d\x0a將客戶端的網(wǎng)絡(luò)服務(wù)名部分\x0d\x0atest.testserver.com =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此處的笑臉為)。\x0d\x0a拷貝到服務(wù)器的tnsnames.ora文件中。然后再服務(wù)器端用sqlplus system/manager@test.testserver.com連接到數(shù)據(jù)庫。\x0d\x0a 如果能連接成功,說明你的客戶端與服務(wù)器端的網(wǎng)絡(luò)有問題。\x0d\x0a 如果連接不成功,用前面的部分檢查網(wǎng)絡(luò)服務(wù)名部分部分是否正確,如果確信網(wǎng)絡(luò)服務(wù)名部分正確而且所有的客戶端都連不上數(shù)據(jù)庫則可能為系統(tǒng)TCP/IP或Oracle系統(tǒng)有問題,建議重新安裝數(shù)據(jù)庫。\x0d\x0a該錯誤表示用于連接的網(wǎng)絡(luò)服務(wù)名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的網(wǎng)絡(luò)服務(wù)名只有test,假如用戶在連接時用sqlplus system/manager@test1則就會給出TNS-12154錯誤。\x0d\x0a要注意的是,有時即使在tnsnames.ora文件中有相應(yīng)的網(wǎng)絡(luò)服務(wù)名,可是用該網(wǎng)絡(luò)服務(wù)名連接時還會出錯,出現(xiàn)這種情況的典型配置如下(在客戶端的機器上):\x0d\x0asqlnet.ora文件:\x0d\x0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)\x0d\x0aNAMES.DEFAULT_DOMAIN = server.com\x0d\x0atnsnames.ora文件:\x0d\x0atest =\x0d\x0a(DESCRIPTION=\x0d\x0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))\x0d\x0a)\x0d\x0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)\x0d\x0a)\x0d\x0a)\x0d\x0a此處的笑臉為)。\x0d\x0asql*plus運行基本機理:\x0d\x0a 在用戶輸入sqlplus system/manager@test后,sqlplus程序會自動到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN參數(shù),假 如該參數(shù)存在,則將該參數(shù)中的值取出,加到網(wǎng)絡(luò)服務(wù)名的后面, \x0d\x0a\x0d\x0a即此例中你的輸入由sqlplus system/manager@test自動變?yōu)閟qlplus system/manager@test.server.com\x0d\x0a \x0d\x0a,然后再到tnsnames.ora文件中找test.server.com網(wǎng)絡(luò)服務(wù)名,這當(dāng)然找不到了,因為該文件中只有test網(wǎng)絡(luò)服務(wù)名,所以報 \x0d\x0a 錯。解決的辦法就是將sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN參數(shù)注釋掉即可,如 \x0d\x0a#NAMES.DEFAULT_DOMAIN = \x0d\x0aserver.com。假如NAMES.DEFAULT_DOMAIN參數(shù)不存在,則sqlplus程序會直接到tnsnames.ora文件中找 \x0d\x0atest網(wǎng)絡(luò)服務(wù)名,然后取出其中的host,port,tcp,service_name,利用這些信息將連接請求發(fā)送到正確的數(shù)據(jù)庫服務(wù)器上。\x0d\x0a 另外原則上tnsnames.ora中的配置不區(qū)分大小寫,但是我的確遇到區(qū)分大小寫的情況,所以最好將使用的網(wǎng)絡(luò)服務(wù)與tnsnames.ora中配置的完全一樣。\x0d\x0aORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.\x0d\x0a該錯誤表示能在tnsnames.ora中找到網(wǎng)絡(luò)服務(wù)名,但是在tnsnames.ora中指定的SERVICE_NAME與服務(wù)器端的SERVICE_NAME不一致。解決的辦法是修改tnsnames.ora中的SERVICE_NAME。\x0d\x0a\x0d\x0a 易混淆術(shù)語介紹:\x0d\x0a \x0d\x0a Db_name:對一個數(shù)據(jù)庫(Oracle database)的唯一標(biāo)識,該數(shù)據(jù)庫為第一章講到的Oracle \x0d\x0adatabase。這種表示對于單個數(shù)據(jù)庫是足夠的,但是隨著由多個數(shù)據(jù)庫構(gòu)成的分布式數(shù)據(jù)庫的普及,這種命令數(shù)據(jù)庫的方法給數(shù)據(jù)庫的管理造成一定的負 \x0d\x0a 擔(dān),因為各個數(shù)據(jù)庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain參數(shù),這樣在數(shù)據(jù)庫的標(biāo)識是由Db_name和 \x0d\x0aDb_domain兩個參數(shù)共同決定的,避免了因為數(shù)據(jù)庫重名而造成管理上的混亂。這類似于互連網(wǎng)上的機器名的管理。我們將Db_name和 \x0d\x0aDb_domain兩個參數(shù)用’.’連接起來,表示一個數(shù)據(jù)庫,并將該數(shù)據(jù)庫的名稱稱為Global_name,即它擴展了Db_name。 \x0d\x0aDb_name參數(shù)只能由字母、數(shù)字、’_’、’#’、’$’組成,而且最多8個字符。\x0d\x0a\x0d\x0a Db_domain:定義一個數(shù)據(jù)庫所在的域,該域的命名同互聯(lián)網(wǎng)的’域’沒有任何關(guān)系,只是數(shù)據(jù)庫管理員為了更好的管理分布式數(shù)據(jù)庫而根據(jù)實際情況決定的。當(dāng)然為了管理方便,可以將其等于互聯(lián)網(wǎng)的域。\x0d\x0a\x0d\x0aGlobal_name:對一個數(shù)據(jù)庫(Oracle \x0d\x0adatabase)的唯一標(biāo)識,oracle建議用此種方法命令數(shù)據(jù)庫。該值是在創(chuàng)建數(shù)據(jù)庫是決定的,缺省值為Db_name. \x0d\x0aDb_domain。在以后對參數(shù)文件中Db_name與Db_domain參數(shù)的任何修改不影響Global_name的值,如果要修改 \x0d\x0aGlobal_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO \x0d\x0a命令進行修改,然后修改相應(yīng)參數(shù)。\x0d\x0a\x0d\x0aService_name:該參數(shù)是oracle8i新引進的。在8i以前,我們用SID來表示標(biāo)識數(shù)據(jù)庫的一個實例,但是在Oracle的并行環(huán)境中,\x0d\x0a \x0d\x0a一個數(shù)據(jù)庫對應(yīng)多個實例,這樣就需要多個網(wǎng)絡(luò)服務(wù)名,設(shè)置繁瑣。為了方便并行環(huán)境中的設(shè)置,引進了Service_name參數(shù),該參數(shù)對應(yīng)一個數(shù)據(jù)庫,\x0d\x0a 而不是一個實例,而且該參數(shù)有許多其它的好處。該參數(shù)的缺省值為Db_name. \x0d\x0aDb_domain,即等于Global_name。一個數(shù)據(jù)庫可以對應(yīng)多個Service_name,以便實現(xiàn)更靈活的配置。該參數(shù)與SID沒有直接關(guān)\x0d\x0a 系,即不必Service name 必須與SID一樣。\x0d\x0aNet service name:網(wǎng)絡(luò)服務(wù)名,又可以稱為數(shù)據(jù)庫別名(database alias)。是客戶端程序訪問數(shù)據(jù)庫時所需要,屏蔽了客戶端如何連接到服務(wù)器端的細節(jié),實現(xiàn)了數(shù)據(jù)庫的位置透明的特性。
給他們單獨建個用戶,給這個用戶授權(quán)第三方人員只能用的表視圖函數(shù)存儲過程等。
然后讓他們自己建dblink
Oracle新建數(shù)據(jù)庫可以參考以下操作方法:
1、首先點擊桌面左下角的開始圖標(biāo);
2、在跳出的窗口中找到并點擊“Database Configuration Assistant”選項;
3、接著選擇“創(chuàng)建數(shù)據(jù)庫”并點擊“下一步”選項;
4、接著在跳出來的窗口中輸入數(shù)據(jù)庫的參數(shù),點擊“下一步”;
5、會彈出對數(shù)據(jù)庫的一些概要,檢查無誤后點擊“完成”選項;
6、進行數(shù)據(jù)庫“orcl”的創(chuàng)建;
7、耐心等待一段時間后,就創(chuàng)建成功了。如果不能解決問題,建議重復(fù)上述步驟再操作一遍試試看,如果還是不能解決問題,建議請專業(yè)的工作人員幫忙解決問題。