oracle資料庫實現
⑴ oracle資料庫實現全文檢索
Oracle全文檢索配置方法:
1.檢查資料庫是否具有全文檢索功能(這是針對已經建成使用的資料庫)
查看用戶中是否存在ctxsys用戶,查詢角色里是否存在ctxapp角色。以上兩個中的1個不滿足(不存在),則說明沒有裝過全文檢索功能。
使用contains函數的時候,若沒有全文檢索則會報錯的。
2.若沒有,則需要手動建立,先建立全文檢索要使用的空間
sqlplus / as sysdba --進入控制台
createtablespaceIdx_ctxsysdatafile'/oradata/sg186fx/ctxsys01.;--創建全文檢索使用的表空間
3.創建全文檢索使用的用戶和角色及相應的包,則需要執行oracle自帶的一個腳本:cd $ORACLE_HOME/ctx/admin/catctx.sql
還是在sqlplus中執行:
@?/ctx/admin/catctx.sql ctxsys Idx_ctxsys temp nolock
在執行這個腳本的時候,輸入了幾個參數,第一個參數ctxsys為ctxsys用戶的密碼
第二個參數Idx_ctxsys為ctxsys用戶要使用的表空間
第三個參數temp為ctxsys用戶使用的臨時表空間
第四個參數nolock為ctxsys用戶處於解鎖狀態。
4.創建完成後,要登錄ctxsys用戶
connect ctxsys/ctxsys
執行以下腳本:@?/ctx/admin/defaults/drdefus.sql(這是個很重要的腳本,後面創建索引會使用該腳本創建的信息)
5.創建全文索引語法分析器
先要明確使用全文索引的用戶,我要使用全文索引的是sgpm用戶
因此
grantexecuteonctxsys.ctx_ddltosgpmwithgrantoption;
connect sgpm/sgpm
設置語法分析器:
execctx_ddl.drop_preference('chinalexer');
execctx_ddl.create_preference('chinalexer','chinese_lexer');
設置詞法屬性:
execctx_ddl.drop_preference('idx_c_store');
begin
ctx_ddl.create_preference('idx_c_store','BASIC_STORAGE');
ctx_ddl.set_attribut('idx_c_store','I_TABLE_CLAUSE','tablespacesIdx_ctxsy');
ctx_ddl.set_attribute('idx_c_store','I_INDEX_CLAUSE','tablespaceIdx_ctxsycompress2');
end;
/
6.創建索引
createindexsgpm.idx_c_cons_nameonsgpm.c_cons(cons_name)indextypeisctxsys.contextparameters('lexerchinalexerstorageidx_c_store');
7.同步索引
variablejobnonumber;
begin
dbms_job.submit(:jobno,'pkg_sp_tools.p_cont_sys_index();',sysdate,'trunc(sysdate)+19/24+1');--執行的是個性化方法。
end;
/
普通的就是用:
execctx_ddl.sync_index('idx_c_cons_name');
到此,全文檢索創建成功,contains函數就可以正常使用了。
注意:創建的過程中會出現ORA-29879:cannot create multiple domain index on a column listusing same indextype ,這說明在其他用戶下已經建立了該索引。
⑵ 如何實現兩個oracle資料庫實時同步
為方便完成指定數據表的同步操作,可以採用dblink與merge結合的方法完成。
操作環境: 此資料庫伺服器ip為192.168.196.76,有center與branch兩個庫,一般需要將center的表數據同步到branch,center為源庫,branch為目標庫,具體步驟如下:
1.在源庫創建到目標庫的dblink
create database link branch --輸入所要創建dblink的名稱,自定義
connect to dbuser identified by 「password」 --設置連接遠程資料庫的用戶名和密碼
using '192.168.196.76/branch'; --指定目標資料庫的連接方式,可用tns名稱
在創建dblink時,要注意,有時候可能會報用戶名和密碼錯誤,但實際上我們所輸入的賬戶信息是正確的,此時就注意將密碼的大小寫按伺服器上所設置的輸入,並在賬號密碼前號加上雙引號(伺服器版本不同造成的)。
2.成功後驗證dblink
select * from tb_bd_action@branch; --查詢創建好的brach庫
正常情況下,如果創建dblink成功,可採用該方式訪問到遠程資料庫的表.
3.通過merge語句完成表數據同步
此例中需要將center庫中的tb_sys_sqlscripe表同步到branch,簡單的語法如下:
merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on (b.pk=c.pk) --從center將表merge到branch,同步的依據是兩個表的pk
when matched then update set b.sqlscripe=c.sqlscripe,b.author=c.author --如果pk值是相同則將指定表的值更新到目標表
when not matched then --如果pk值不一至,則將源表中的數據整條插入到目標表中
insert values (c.pk, c.fk, c.createtime, c.lastmodifytime,c.author,c.mole,c.deleteflag, c.scripttype);
commit; --記得merge後必須commit,否則更改未能提交
4.為方便每次需要同步時自動完成同步工作,可將該語句做成存儲過程或腳本來定時執行或按要求手動執行,簡單說一下創建腳本的方法:
a.創建merge文件夾
b.先將merge語句寫完整後,存到merge.sql文件中
c.新建merge.bat文件,編輯後寫入以下內容
sqlplus user/password@serverip/database @"%cd%\merge.sql"
⑶ ORACLE資料庫高可用的實現有哪些方法
class.forname("xx.xx")等同於class.forname("xx.xx",true,callclass.class.getclassloader()),第二抄個參數(bool)表示裝載類的時候是否初始化該類,即調用類的靜態塊的語句及初始化靜態成員變數。
classloader
loader
=
thread.currentthread.getcontextclassloader();
//也可以用
⑷ 用java做界面連接oracle資料庫實現增刪改查功能,具體步驟怎麼做
如果不用ORM框架,那麼直接引入ojdbc6.jar 驅動包,然後在代碼中JDBC配置;
然後可以使用jdbc實現增刪改查,比如下面代碼
ResultSetrs=null;
Statementstmt=null;
Connectionconn=null;
try{
Class.forName("oracle.jdbc.driver.oracleDriver");
//neworacle.jdbc.driver.oracleDriver();
conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:yuewei","scott","tiger");
stmt=conn.createStatement();
rs=stmt.executeQuery("select*fromdept");
while(rs.next()){
System.out.println(rs.getString("deptno"));
//System.out.println(rs.getInt("deptno"));
}
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}catch(SQLExceptione){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
2.
⑸ Oracle資料庫中的數據完整性如何實現
Oracle資料庫的完整性有三個:實體完整性、參考完整性和自定義完整性。它的實現是通過5五個約束來完成的。五個約束如下:
主鍵 primary key
非空 not null
唯一 unique
檢查 check
外鍵 foreign key
⑹ 求助。oracle資料庫實現a、b、c三表聯合查詢,如何實現如下效果
selectA.姓名,A.性別,D.選課內容fromA
leftjoin(
SELECTB.學號student,wmsys.wm_concat(C.課程回名答稱)as選課內容FROMB
leftjoinConB.課程id=C.課程ID
GROUPBYB.學號
)asDonA.學號=D.學號
⑺ 如何實現Oracle資料庫的讀寫分離
在MySQL作為應用系統的後台資料庫時,我們常常見到這樣的架構,一拖二、一拖三等等。這是用MySQL的讀寫分離技術,實現數據的寫入和讀取分別在不同的庫上,提升了資料庫服務能力。
同樣,在Oracle作為後台資料庫的架構中,我們也可以這么做。實現的方式有很多種。有基於RAC架構的,使用其中某個節點作為讀庫;有基於Streams數據復制技術的,實時將數據復制到另外一個庫供讀取;有使用第三方數據復制軟體的,如Golden Gate(已經被Oracle收入囊中)、DSG的,也是實時復制數據到另外一個庫中。還有使用Logical standby技術,實時復制數據到一個庫,且該庫是對應用而言是只讀的。
⑻ 一資料庫方案用ORACLE實現
給A\B分別賦予來不通的角色。各種角源色都有不通的許可權。你可以把資料庫A部分的讀取即select付給A用戶 grant select …… to A 同理給B付grant select …… to B。即可。不同的用戶密碼肯定是不同的吧。至於讀取修改指定的內容貌似oracle中,只要你登錄了,操作是不需要密碼的。
有什麼不懂的追問
⑼ 如何實現兩個Oracle資料庫的數據同步
為方便完成指定數據表的同步操作,可以採用dblink與merge結合的方法完成。
操作環境: 此資料庫伺服器ip為192.168.196.76,有center與branch兩個庫,一般需要將center的表數據同步到branch,center為源庫,branch為目標庫,具體步驟如下:
1.在源庫創建到目標庫的dblink
create database link branch --輸入所要創建dblink的名稱,自定義
connect to dbuser identified by 「password」 --設置連接遠程資料庫的用戶名和密碼
using '192.168.196.76/branch'; --指定目標資料庫的連接方式,可用tns名稱
正常情況下,如果創建dblink成功,可採用該方式訪問到遠程資料庫的表.
3.通過merge語句完成表數據同步
此例中需要將center庫中的tb_sys_sqlscripe表同步到branch,簡單的語法如下:
merge into tb_sys_sqlscripe@branch b using tb_sys_sqlscripe c on (b.pk=c.pk) --從center將表merge到branch,同步的依據是兩個表的pk
when matched then update set b.sqlscripe=c.sqlscripe,b.author=c.author --如果pk值是相同則將指定表的值更新到目標表
when not matched then --如果pk值不一至,則將源表中的數據整條插入到目標表中
insert values (c.pk, c.fk, c.createtime, c.lastmodifytime,c.author,c.mole,c.deleteflag, c.scripttype);
commit; --記得merge後必須commit,否則更改未能提交
4.為方便每次需要同步時自動完成同步工作,可將該語句做成存儲過程或腳本來定時執行或按要求手動執行,簡單說一下創建腳本的方法:
a.創建merge文件夾
b.先將merge語句寫完整後,存到merge.sql文件中
c.新建merge.bat文件,編輯後寫入以下內容
sqlplus user/password@serverip/database @"%cd%merge.sql"
⑽ 在oracle資料庫中用sql語句實現
在你原來的基礎上面調整
select
distinctes.flowid,
a.ticketsubject,
tu.name,
a.startdeptdeptname,
es.uptime,
es.filename,
a.PROJECTNAME
fromes_flowef,ts_usertu,
(selectx.*,row_number()over(partitionbyx.flowidorderbyuptimedesc)ordernofromEs_Attachmentx)es,--修改
(selectflowid,PROJECTNAME,startdept,ticketsubject
from(selectflowid,ticketno,PROJECTNAME,startdept,ticketsubjectfrombusiness_ysgl)
)a
wherea.flowid=ef.flowid
andtu.userid=ef.starterid
andtu.deleted=0
anda.flowid=es.flowid
andes.orderno=1--修改