為方便完成指定數據表的同步操作,可以采用dblink與merge結合的方法完成。
發展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務至上”的服務理念,堅持“二合一”的優良服務模式,真誠服務每家企業,認真做好每個細節,不斷完善自我,成就企業,實現共贏。行業涉及成都會所設計等,在成都網站建設公司、成都全網營銷推廣、WAP手機網站、VI設計、軟件開發等項目上具有豐富的設計經驗。
操作環境: 此數據庫服務器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.module,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"
本文檔旨在提供指南和核對清單,用于將之前升級的數據庫從Oracle12c降級回以前的版本:11.2.0.3,11.2.0.2,11.1.0.7必須加以說明的是,將數據庫實例從當前版本降級到升級前的版本時,數據庫不會返回到升級前的完全相同狀態。根據所涉及的版本,升級過程會進行不可逆的更改。用戶使用降級過程可以打開和訪問以前版本的數據庫實例。這通常便已足夠。可能需要采取其他更正操作(例如卸載/重新安裝或重新升級到當前補丁集級別來解決降級后的遺留問題。如果目標是讓實例返回與升級前完全相同的狀態,則還應使用包括完全恢復到升級前狀態在內的其他過程。本文中討論的過程是基于腳本的降級。本文不介紹使用導出/導入、數據泵或其他方法將數據從一個版本移動到另一個版本。您所降級到的版本的Oracle二進制文件,在開始降級過程之前應該在服務器上可用/已安裝。如果您卸載了要降級到的Oracle可執行文件,請重新安裝Oracle二進制文件到正確的版本/補丁程序級別以降級。此過程旨在降級已成功升級到12c的數據庫,并非用于從失敗的升級退回。您只能降級到升級前所用的版本和補丁程序級別。直接升級可以在版本10.2.0.5、11.1.0.7或版本11.2.0.2及更高版本上執行。可以對這些版本中除10.2.0.5之外的版本進行降級。例如,如果通過應用中間補丁程序11.1.0.7從Oracle11.1.0.6升級到Oracle12c(12.1.0),則不能降級到Oracle11.1.0.6。降級只能對直接升級版本執行。例外:雖然可以對10.2.0.5直接升級,但降級不適用于10.2.0.5。這是因為在升級過程中,compatible參數已設置為最低11.0.0。這使得無法降級到10.2.0.5。可以降級的版本為11.1.0.7、11.2.0.2、11.2.0.3或更高版本。如果有任何補丁程序應用到了從升級后的主目錄運行的源數據庫,則需要先回退,然后才能開始降級過程。卸載和回退補丁程序的步驟記錄在所涉及補丁程序的自述文件中。未能卸載和回退補丁程序可能會導致無法降級,包括無法重新驗證字典對象。Exadata捆綁補丁程序示例,其過程為:卸載補丁程序示例:$opatchauto/u01/app/oracle/patches/14103267-rollback回退任何在補丁程序應用過程中應用的SQL:示例:SQL@rdbms/admin/catbundle_EXA__ROLLBACK.sql,用于回退SQL更改。解決方案降級前步驟-XMLDB組件在12c中是必需的。在升級到12c期間,將安裝XMLDB組件(如果未安裝)。從12c降級將刪除安裝的XDB組件-EnterpriseManager不支持降級。在降級之前,請重新配置OracleEM控件。請參閱OracleDatabaseUpgradeGuide12cRelease1(12.1)E17642-106DowngradingOracleDatabasetoanEarlierRelease6.6.5RestoringOracleEnterpriseManagerafterDowngradingOracleDatabase-升級到12c期間,將刪除DatabaseControl資料檔案庫。降級之后,請重新配置DBControl。Note870877.1HowToSaveOracleEnterpriseManagerDatabaseControlDataBeforeUpgradingTheSingleInstanceDatabaseToOtherRelease?Note876353.1HowToRestoreTheOracleEnterpriseManagerDataToDowngradeTheSingleInstanceDatabaseToPrevious/SourceRelease?-compatible參數不能已經更改到12.1.0。-禁用DataVault(如果已啟用)。Note803948.1HowToUninstallOrReinstallDatabaseVaultin11g(UNIX)Note453902.1EnablingandDisablingOracleDatabaseVaultinWINDOWS-如果數據庫使用OracleLabelSecurity,則在新OracleDatabase12cOracle主目錄中運行OracleLabelSecurity(OLS)預處理降級olspredowngrade.sql腳本(在$ORACLE_HOME/rdbms/admin上提供)。-時區版本應相同。-取消設置并指向12c主目錄的ORA_TZFILE(如果已設置)。-如果數據庫上有OracleApplicationExpress,則必須將apxrelod.sql文件從OracleDatabase12c$ORACLE_HOME/apex/目錄復制到Oracle主目錄之外的目錄,例如系統上的臨時目錄以稍后執行。-如果基于固定對象創建了對象,則刪除這些對象以避免可能的ORA-00600錯誤。您可以在降級之后重新創建這些對象。-如果降級集群數據庫,則徹底關閉實例并將CLUSTER_DATABASE初始化參數更改為FALSE。降級之后,必須將此參數設置回TRUE。滿足以上先決條件之后,可以繼續進行降級。數據庫的降級步驟1)確保所有數據庫組件有效。只能從成功升級的數據庫執行降級。要驗證數據庫組件狀態,請執行以下查詢以SYS用戶身份連接到數據庫colcomp_idformata10colcomp_nameformata30colversionformata10colstatusformata8selectsubstr(comp_id,1,15)comp_id,substr(comp_name,1,30)comp_name,substr(version,1,10)version,statusfromdba_registry2)驗證沒有屬于sys/system的無效對象selectowner,count(object_name)"Invalidobjectcount"fromdba_objectswherestatus!='VALID'andownerin('SYS','SYSTEM')groupbyowner;如果計數為零,則可以繼續降級。如果有無效對象,則執行utlrp.sql多次,如果對象無法解析為有效狀態,則不能繼續降級。建立SR或在DBA社區上發帖以尋求幫助。或者,對于1和2,運行以下腳本:Note556610.1ScripttoCollectDBUpgrade/MigrateDiagnosticInformation(dbupgdiag.sql)3)關閉數據庫Shutdownimmediate4)對12c數據庫做備份5)以降級模式啟動數據庫Startupdowngrade;6)執行降級腳本SqlSpooldowngrade.logSql@$ORACLE_HOME/rdbms/admin/catdwgrd.sql注:$ORACLE_HOME應指向12c主目錄catdwgrd.sql腳本將數據庫中的所有組件降級到支持的主版本或補丁集版本(您最初升級時的版本)SqlspooloffSqlshutdownimmediateExitSQLPlusSqlexit;7)如果操作系統為LINUX/UNIX:將以下環境變量更改為要降級到的源數據庫:ORACLE_HOMEPATH編輯/etc/oratabor/var/opt/oracle/oratab以更改將數據庫映射到源數據庫Oracle主目錄如果操作系統是Windows,則完成以下步驟:a.停止所有Oracle服務,包括OracleDatabase12c數據庫的OracleServiceSIDOracle服務,其中SID是實例名稱。例如,如果SID為ORCL,則在命令行提示符中輸入以下內容:C:\NETSTOPOracleServiceORCLb.在命令提示符下,通過運行ORADIM命令刪除Oracle服務。如果出現提示,則輸入此Windows系統上活動標準用戶帳戶的口令。例如,如果SID為ORCL,則輸入以下命令:C:\ORADIM-DELETE-SIDORCLc.在命令提示符下,使用ORADIM命令創建要降級的數據庫的Oracle服務。C:\ORADIM-NEW-SIDSID-INTPWDPASSWORD-MAXUSERSUSERS-STARTMODEAUTO-PFILEORACLE_HOME\DATABASE\INITSID.ORA8)還原配置文件將配置文件(口令文件、參數文件等)還原到降級版本的ORACLE_HOME。9)如果這是OracleRAC數據庫,則執行以下命令以將數據庫修改為單實例模式:SETCLUSTER_DATABASE=FALSE10)從降級版本$ORACLE_HOME/rdbms/admin目錄執行catrelod腳本。啟動sqlplus,以具有sysdba權限的用戶SYS身份連接到數據庫實例,然后以升級模式啟動數據庫::cd$ORACLE_HOME/rdbms/admin:sqlplussqlconnectsysassysdbasqlstartupupgradesqlspoolcatrelod.logsql@?/rdbms/admin/catrelod.sqlsqlspooloffcatrelod.sql腳本在降級的數據庫中重新加載各個數據庫組件的合適版本。11)運行utlrp.sql腳本:SQL@utlrp.sqlSqlexit;utlrp.sql腳本重新編譯先前處于INVALID狀態的所有現有PL/SQL模塊,例如package、procedure、type等。12)檢查已降級數據庫的狀態:Note556610.1ScripttoCollectDBUpgrade/MigrateDiagnosticInformation(dbupgdiag.sql)此sql腳本是一組查詢語句,用于提供用戶友好的輸出,以在升級前后診斷數據庫的狀態。腳本將創建名為db_upg_diag__.log的文件。13)降級之后,可能在sys用戶下發現無效的QT視圖。這是因為視圖已從基表中選擇了錯誤的列。您需要重新創建這些視圖。請參閱說明:Note1520209.1QT_*BUFERViewsInvalidafterdowngradefrom12C降級后步驟:1)如果您是降級到OracleDatabase11g版本1(11.1.0.7)并且數據庫中有OracleApplicationExpress,則轉到您將apxrelod.sql腳本復制到的目錄(在降級前步驟中)。運行apxrelod.sql腳本以手動重新加載OracleApplicationExpress:SQL@apxrelod.sql運行apxrelod.sql腳本以避免程序包APEX_030200.WWV_FLOW_HELP由于以下錯誤而成為INVALID狀態:PLS-00201:identifier'CTX_DDL'mustbedeclared2)如果數據庫中啟用了OracleLabelSecurity,則執行以下腳本a.從OracleDatabase12c的Oracle主目錄下將olstrig.sql腳本復制到要將數據庫降級到的版本的Oracle主目錄。b.從降級到的版本的Oracle主目錄,運行olstrig.sql以在表上使用OracleLabelSecurity策略重新創建DML觸發器:SQL@olstrig.sql3)如果降級集群數據庫,則必須運行以下命令以降級OracleClusterwaredatabase配置:$srvctldowngradedatabase-ddb-unique-name-ooraclehome-tto_version其中db-unique-name是數據庫名稱(而非實例名稱),oraclehome是已降級數據庫的舊Oracle主目錄的位置,to_version是數據庫所降級到的數據庫版本
少了引號
原語句是:update RTI_ALARM_ITEM set ALARM_TYPE = 0 where ALARM_TYPE = '其他'
放到execute immediate后面應該這樣引用:
execute immediate 'update RTI_ALARM_ITEM set ALARM_TYPE = 0 where ALARM_TYPE = ''其他''';
另外,update完之后你沒有commit;
修改這兩點你再試試看!
C#利用update更新數據到oracle數據庫:
第一步:打開oracle數據庫
public static string connString = "";
public static OracleConnection conn = null;
//打開數據庫連接
public static bool Open()
{
//從配置文件中獲取連接字符串
//配置文件需要放在項目目錄下的bin\Release中
connString = getXmlValue("connString");
conn = new OracleConnection(getXmlValue("connString"));
try
{
conn.Open();
Console.WriteLine("數據庫連接成功");
return true;
}
catch (System.Exception ex)
{
Console.Write(ex.Message);
MessageBox.Show("未能連接到數據庫");
return false;
}
第二步:執行更新方法:
public static int update(int ruleId, int equipmentId, String equipmentName, String propertyName, int ruleType, String ruleRequest, String ruleRequestOther, String ruleExplain)
{
String sql = "update Device_Attr t set t.BASEID = :equipmentId, t.BASENAME = :equipmentName,t.CA_NAME = :propertyName,t.CA_RULETYPE = :ruleType,t.CA_RULETEXT = :ruleRequest,t.CA_RULETEXT2 = :ruleRequestOther,t.CONTENT = :ruleExplain where t.CA_ID =:ruleId";
OracleCommand cmd = new OracleCommand(sql, conn);
OracleParameter param_1 = new OracleParameter(":equipmentId", equipmentId);
cmd.Parameters.Add(param_1);
OracleParameter param_2 = new OracleParameter(":equipmentName", equipmentName + "$");
cmd.Parameters.Add(param_2);
OracleParameter param_3 = new OracleParameter(":propertyName", propertyName);
cmd.Parameters.Add(param_3);
OracleParameter param_4 = new OracleParameter(":ruleType", ruleType);
cmd.Parameters.Add(param_4);
OracleParameter param_5 = new OracleParameter(":ruleRequest", ruleRequest);
cmd.Parameters.Add(param_5);
OracleParameter param_6 = new OracleParameter(":ruleRequestOther", ruleRequestOther);
cmd.Parameters.Add(param_6);
OracleParameter param_7 = new OracleParameter(":ruleExplain", ruleExplain);
cmd.Parameters.Add(param_7);
OracleParameter param_8 = new OracleParameter(":ruleId", ruleId);
cmd.Parameters.Add(param_8);
int result = cmd.ExecuteNonQuery();
return result;
}
網站題目:oracle如何更新腳本 oracle怎么更新數據
本文URL:http://vcdvsql.cn/article10/hpgjdo.html
成都網站建設公司_創新互聯,為您提供企業建站、網站制作、電子商務、網站營銷、標簽優化、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯