閱讀 Oracle 資料庫配接器系結屬性
Microsoft BizTalk Adapter for Oracle Database 會呈現數個系結屬性。 藉由設定這些屬性,您可以控制部分配接器的行為。 本節描述 Oracle 資料庫配接器系結屬性。 它也會示範如何使用 .NET 程式設計,或在實體埠系結上設定 BizTalk Server屬性,來存取它們。
配接器系結屬性
下表顯示依類別分組的 Oracle 資料庫配接器系結屬性。 類別是指每個系結屬性出現在不同應用程式所呈現的對話方塊中,以設定配接器 (或系結) 的節點。
Binding 屬性 | 類別 | 描述 | .NET 類型 |
---|---|---|---|
CloseTimeout | 一般 | WCF 連線關閉逾時。 預設值是 1 分鐘。 不支援。 | System.TimeSpan |
EnableBizTalkCompatibilityMode | 一般 | 使用配接器搭配BizTalk Server時,將此系結屬性的值設定為True。 否則,您必須將此系結屬性的值設定為 False。 | bool (System.Boolean) |
InboundOperationType | 一般 | 指定您要執行 輪詢 或 通知 輸入作業。 預設值為 Polling。 如需 輪詢的詳細資訊, 請參閱 支援在 Oracle 資料庫中接收輪詢型資料變更訊息。 如需 通知的詳細資訊,請參閱 使用 Oracle 資料庫配接器接收資料庫變更通知的考慮。 |
列舉 |
名稱 | 一般 | 唯讀值,會傳回新增配接器服務參考 Visual Studio 外掛程式所產生的檔案名,以保存 WCF 用戶端類別。 新增配接器服務參考外掛程式會將 「Client」 附加至 Name 屬性的值,以形成檔案名。 傳回的值是 「OracleDBBinding」;針對此值,產生的檔案會命名為 「OracleDBBindingClient」。 | 字串 |
OpenTimeout | 一般 | ODP.NET 屬性。 指定 WCF 連線開啟逾時。 預設值是 1 分鐘。 這個屬性是使用 ODP.NET 來實作。 重要: Oracle Database 配接器一律會使用 OpenTimeout ,在開啟與 Oracle 資料庫的連線時設定連線開啟逾時。 配接器會忽略當您開啟通訊物件時所傳遞的任何逾時 (System.TimeSpan) 參數,例如通道。 |
System.TimeSpan |
ReceiveTimeout | 一般 | 指定 WCF 訊息接收逾時。 基本上,這表示配接器等候輸入訊息的時間上限。 預設值是 10 分鐘。 重要: 針對輪詢之類的輸入作業,我們建議將逾時設定為可能的最大值,也就是 24.20:31:23.6470000 (24 天) 。 搭配BizTalk Server使用配接器時,將逾時設定為大值並不會影響配接器的功能。 |
System.TimeSpan |
SendTimeout | 一般 | ODP.NET 屬性。 指定 WCF 訊息傳送逾時。 預設值是 1 分鐘。 不支援。 | System.TimeSpan |
DataFetchSize | BufferManagement | ODP.NET 屬性。 指定以位元組為單位的資料量,ODP.NET 從一個伺服器往返的結果集中擷取。 預設值為 65536。 這個屬性用於效能微調。 | long (System.Int64) |
InsertBatchSize | BufferManagement | 指定多個記錄插入作業的批次大小。 預設值為 1。 若為 InsertBatchSize 大於一的值,Oracle Database 配接器會將指定的記錄數目批次處理成單一 ODP.NET 呼叫。 如果 Insert 作業中的記錄數目不是批次大小的倍數,最終批次將包含少於批次大小值的記錄。 例如,如果插入訊息有 10 筆記錄,且 InsertBatchSize 設定為 1,配接器會讀取個別記錄,並將其寫入 Oracle 資料庫。 因此,配接器會在 Oracle 資料庫上執行 10 個不同的作業。 同樣地,如果插入訊息有 10 筆記錄,且 InsertBatchSize 設定為 5,配接器會一次讀取並寫入 5 筆記錄到 Oracle 資料庫,因此只執行 2 個插入作業。 如果記錄的結構在批次中不相同,則會擲回 Microsoft.ServiceModel.Channels.Common.XmlReaderParsingException 例外狀況,並回復整個插入作業的交易。 針對 InsertBatchSize選擇良好的值,可以大幅改善多個記錄 Insert 作業的配接器效能。 |
int (System.Int32) |
LongDatatypeColumnSize | BufferManagement | 指定 Oracle long 資料類型資料行 (32512) 位元組的大小上限。 預設值是 0。 如果您未對 long 資料類型執行作業,則必須使用預設值。 若要預先擷取資料,您必須指定 -1 做為此系結屬性的值。 如果您是下列專案,您必須明確為此系結屬性設定適當的值: - 執行包含 long 資料類型參數的預存程式。 - 在包含長資料類型之資料行的資料表上執行 Select 作業,而 SELECT 語句不包含主鍵資料行。 注意: 這個系結屬性已被取代。 |
long (System.Int64) |
MaxOutputAssociativeArrayElements | BufferManagement | 指定配接器在執行在回應中傳回關聯陣列的作業時所建立的關聯陣列大小。 配接器會將陣列的大小傳達給 ODP.NET,接著會根據陣列大小建立緩衝區。 預設值為 32。 執行涉及 PL/SQL 資料表類型的作業時,這個系結屬性很有用。 |
int (System.Int32) |
MetadataPooling | BufferManagement | ODP.NET 屬性。 指定 ODP.NET 是否快取已執行查詢的中繼資料資訊。 預設值為 True,可啟用元資料共用。 快取這項資訊可改善效能;不過,如果基礎 Oracle 成品的變更發生在 Oracle 系統上,此集區中繼資料將會不同步。這可能會導致在 Oracle 系統上執行的作業傳回非預期的例外狀況。 這個屬性用於效能微調。 | bool (System.Boolean) |
StatementCachePurge | BufferManagement | ODP.NET 屬性。 指定當連接傳回至連接集區時,是否清除與連接相關聯的 ODP.NET 語句快取。 預設值為 False,這會停用語句快取清除。 這個屬性用於效能微調。 | bool (System.Boolean) |
StatementCacheSize | BufferManagement | ODP.NET 屬性。 指定每個 ODP.NET 連接可以快取的語句數目上限。 將此屬性設定為非零值會啟用連線的語句快取。 預設值為 10。 這個屬性用於效能微調。 | int (System.Int32) |
EnablePerformanceCounters | 診斷 | 指定是否要啟用 WCF LOB 配接器 SDK 效能計數器和 Oracle 資料庫配接器 LOB 延遲效能計數器。 預設值為 False;效能計數器已停用。 LOB 延遲效能計數器會測量 Oracle Database 配接器呼叫 Oracle 資料庫所花費的總時間。 | bool (System.Boolean) |
EnableSafeTyping | 中繼資料 | 啟用或停用安全輸入。 預設值為 False;安全輸入已停用。 此功能可控制配接器如何呈現特定 Oracle 資料類型。 如需安全輸入的詳細資訊,請參閱 基本 Oracle 資料類型1。 | bool (System.Boolean) |
UseSchemaInNameSpace | 中繼資料 | 指定架構名稱 (SCOTT、HR 等) 是否包含在作業及其相關聯類型的 xml 命名空間中。 預設值為 True;架構名稱包含在 命名空間中。 命名空間中未包含配置名稱的優點是,如果有相同名稱的資料表 (例如,EMP) 兩個不同的架構中,則相同的 XML 可用來在兩個數據表上執行簡單的 SQL 作業, (Insert、Update、Delete、Select) 。 例如,如果 UseSchemaInNamespace 屬性為 true,則 SCOTT 上這些作業的命名空間。EMP 資料表為 "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP" ,如果為 false,則命名空間為 "http://Microsoft.LobServices.OracleDB/2007/03/Table/EMP" 。重要: 訊息動作不受 UseSchemaInNamesapce 系結屬性影響;它一律包含架構名稱。 重要: 我們強烈建議在產生中繼資料時,將此系結屬性設定為 True 。 如果您將此屬性設定為 false,Oracle 架構名稱 (例如,SCOTT) 將無法在所產生架構的 XML 命名空間中使用。 因此,如果兩個不同的 Oracle 架構中有兩個具有相同名稱的資料表,而且它們會新增至相同的 BizTalk 專案,BizTalk 專案將無法建置和部署。 如果您想要將這類架構包含在相同的 BizTalk 專案中,您必須手動編輯這些架構,以在 XML 命名空間中包含 Oracle 架構名稱。 |
bool (System.Boolean) |
NotificationPort | 通知 | 指定 ODP.NET 必須開啟的埠號碼,以接聽 Oracle 資料庫中的資料庫變更通知。 預設值為 -1,表示 ODP.NET 使用有效的隨機未使用埠號碼。 重要: 如果開啟 Windows 防火牆,配接器用戶端將不會收到資料庫變更通知。 此外,不建議關閉 Windows 防火牆以接收通知。 因此,若要接收通知而不危害用戶端電腦的安全性,建議將正整數值指定為埠號碼,然後將該埠號碼新增至 Windows 防火牆例外狀況清單。 如果您將此系結屬性設定為預設值 -1,ODP.NET 會使用隨機埠,而配接器用戶端將不知道要新增至 Windows 防火牆例外狀況清單的埠。 如需如何將埠新增至 Windows 防火牆例外狀況清單的指示,請參閱 https://go.microsoft.com/fwlink/?LinkID=196959 。 謹慎: 如果應用程式域中有多個應用程式使用 Oracle 資料庫配接器接收通知,則所有應用程式的 NotificationPort 系結屬性都必須設定為相同的埠號碼。 這是因為 ODP.NET 只會建立一個接聽程式,接聽應用程式域內的一個埠。 |
int (System.Int32) |
NotificationStatement | 通知 | 指定用來註冊以從 Oracle 資料庫取得通知的 SELECT 語句。 SELECT 語句範例可能如下所示。SELECT TID,ACCOUNT,PROCESSED FROM SCOTT.ACCOUNTACTIVITY WHERE PROCESSED = ‘n’ 注意: 您必須指定資料庫物件名稱以及架構名稱。 例如: SCOTT.ACCOUNTACTIVITY 。只有在指定 SELECT 語句的結果集變更時,配接器才會從 Oracle 資料庫取得通知訊息。 |
字串 |
NotifyOnListenerStart | 通知 | 指定配接器是否在接聽程式啟動時傳送通知訊息給配接器用戶端,通知接收位置正在執行。 預設值為 True。 | bool (System.Boolean) |
ConnectionLifetime | OracleConnectionPool | ODP.NET 屬性。 指定連接以秒為單位的最大持續時間。 預設值是 0。 這個屬性用於效能微調。 | int (System.Int32) |
DecrPoolSize | OracleConnectionPool | ODP.NET 屬性。 指定在使用過多的已建立連線時關閉的連接數目。 預設值是 1。 這是用於效能微調。 | int (System.Int32) |
IncrPoolSize | OracleConnectionPool | ODP.NET 屬性。 指定要求新連線時要建立的新連線數目,而且 ODP.NET 連線集區中沒有可用的連線。 預設值為 5。 這個屬性用於效能微調。 | int (System.Int32) |
MaxPoolSize | OracleConnectionPool | ODP.NET 屬性。 指定 ODP.NET 連線集區中的連線數目上限。 預設值為 100。 這個屬性用於效能微調。 重要: 您必須謹慎地設定 MaxPoolSize 。 如果此值設定過大,可能會耗盡 ODP.NET 可用的連線數目。 |
int (System.Int32) |
MinPoolSize | OracleConnectionPool | ODP.NET 屬性。 指定 ODP.NET 連接集區中的連線數目下限。 預設值是 1。 這個屬性用於效能微調。 | int (System.Int32) |
UseOracleConnectionPool | OracleConnectionPool | ODP.NET 屬性。 指定是否要使用 ODP.NET 連接集區。 預設值為 True,可啟用連線共用。 Oracle Database 配接器會使用 ODP.NET 連接集區來實作連線共用。 | bool (System.Boolean) |
PolledDataAvailableStatement | PollingReceive | 指定執行的 SELECT 語句,以判斷是否有任何資料可用於輪詢特定資料表。 指定的語句必須傳回包含資料列和資料行的結果集。 結果集第一個儲存格中的值會指出配接器是否執行 PollingStatement 系結屬性所指定的值。 如果結果的第一個儲存格包含正值,配接器會執行輪詢語句。 例如,這個系結屬性的有效語句會是:Select * from <table_name> 這個系結屬性的預設值設定為: SELECT 1 FROM DUAL 這表示不論所輪詢的資料表是否有資料,配接器都必須繼續輪詢。 注意: 您不得指定這個系結屬性的預存程式。 此外,此語句不得修改基礎 Oracle 資料庫。 |
字串 |
PollingAction | PollingReceive | 指定輪詢作業的動作。 您可以使用取用配接器服務增益集,從為作業產生的中繼資料,判斷特定作業的輪詢動作。 | 字串 |
PollingInterval | PollingReceive | 指定交易輪詢間隔,也就是 Oracle Database 配接器針對 Oracle 資料庫執行輪詢語句的秒數。 預設值為 500。 配接器會使用輪詢間隔來進行下列動作: - 連續輪詢之間的時間間隔。 此間隔是用來執行輪詢和輪詢後查詢。 如果這些查詢是在指定的間隔內執行,配接器會睡眠間隔中的剩餘時間。 - 輪詢交易逾時值。 此值必須設定得夠大,才能包含輪詢語句執行時間、如果指定) 執行時間,以及從用戶端應用程式接收回複以認可交易的時間,則輪詢後語句 (。 如果用戶端應用程式在輪詢間隔到期前傳送回復,配接器會認可交易,並等候直到到達輪詢間隔以執行下一個輪詢。 如果用戶端應用程式傳回錯誤,配接器會終止交易。 如果輪詢間隔在用戶端應用程式傳送回復之前到期,交易將會逾時。如需如何在輪詢案例中使用系結屬性的詳細資訊,請參閱 在 Oracle 資料庫中接收輪詢型資料變更訊息的支援。 |
int (System.Int32) |
PollingStatement | PollingReceive | 指定輪詢語句。 您可以指定簡單的 SELECT 語句或預存程式、函式或封裝程式或函式來進行輪詢。 - 如果您想要輪詢資料表或檢視表,您必須在此系結屬性中指定 SELECT 查詢。 - 如果您想要在封裝內使用預存程式、函式或程式或函數進行輪詢,您必須為此系結屬性中的個別作業指定整個要求訊息。 只有在 PolledDataAvailableStatement 系結屬性所執行的語句傳回某些資料時,才會執行輪詢語句。 重要: Oracle Database 配接器會在 Oracle 交易內指定) 執行輪詢語句和輪詢後語句 (。 如果您在 PollingStatement 系結屬性中使用 SELECT 語句,建議您在 SELECT 語句中指定 FOR UPDATE 子句。 這可確保在交易期間鎖定選取的記錄,而且輪詢後語句可以在選取的記錄上執行任何必要的更新。 如需如何在輪詢案例中使用系結屬性的詳細資訊,包括 FOR UPDATE 子句的使用;請參閱 在 Oracle 資料庫中接收輪詢型資料變更訊息的支援。 |
字串 |
PollWhileDataFound | PollingReceive | 指定如果輪詢資料表中有可用的資料,Oracle Database 配接器是否忽略輪詢間隔,並持續輪詢 Oracle 資料庫。 如果資料表中沒有可用的資料,配接器會還原為在指定的輪詢間隔執行 SQL 語句。 預設值為 False。 假設輪詢間隔設定為 60 秒,而 PolledDataAvailableStatement 指定的語句會傳回可供輪詢的資料。 配接器接著會執行針對 PollingInput 系結屬性指定的語句。 假設介面卡只需要 10 秒才能執行 語句,現在必須等候 50 秒,然後再再次執行 PolledDataAvailableStatement,然後執行輪詢語句。 相反地,若要優化效能,您可以將 PollWhileDataFound 系結屬性設定為 true,讓配接器可以在前一個輪詢週期結束時立即開始執行下一個輪詢週期。 注意: 這個系結屬性適用于在資料表和檢視上進行輪詢,以及使用預存程式、函式或封裝程式或函式輪詢。 |
字串 |
PostPollStatement | PollingReceive | 指定在輪詢語句之後和 /POLLINGSTMT 訊息傳送給取用者之前執行的 PL/SQL 區塊。 預設值為 null;未執行輪詢後語句。 輪詢後語句會在輪詢交易內執行。 輪詢後語句的兩個常見用法是: - 更新輪詢語句中傳回之資料列中的資料行,以指出已處理這些資料行,而且應該從後續的輪詢查詢中排除。 - 將已處理的記錄移至不同的資料表。 重要: 如果指定了輪詢後語句, PollingInterval 應該設定夠大,讓 PL/SQL 區塊在間隔到期之前完成。 如需如何在輪詢案例中使用系結屬性的詳細資訊,請參閱 在 Oracle 資料庫中接收輪詢型資料變更訊息的支援。 |
字串 |
SkipNilNodes | 執行時間行為 | 指定 Oracle 資料庫配接器是否會略過在要求 XML 中標示為 'nil' 的節點插入或更新值。 這個系結屬性適用于在資料表中插入或更新記錄,以及預存程式中的 RECORD 類型參數。 預設值為 True,這表示配接器會略過標示為 'nil' 之節點的值。 在此情況下,如果指定的) 會考慮標示為 'nil' 的節點,Oracle (中的預設值。 如果設定為 False,配接器會明確傳遞這些節點的 Null 值。 注意: 對於不存在於要求 XML 中的節點,配接器一律會略過傳遞值,而不論 SkipNilNodes 系結屬性的值為何。對於 RECORDS 的 PL/SQL 資料表,配接器一律會針對標示為 'nil' 或不存在於要求 XML 中的節點傳遞 Null 值,而不論 SkipNilNodes 系結屬性的值為何。 下列範例會根據您為此系結屬性設定的值,說明配接器組態的差異。 假設要求 XML 如下所示: <EMPNO>1000</EMPNO> <ENAME>John</ENAME> <SAL nil=’true’></SAL> 如果 SkipNilNodes 設定為 True,配接器會執行下列命令: INSERT INTO EMP (EMPNO, ENAME) VALUES (1000, “John”); 如果 SkipNilNodes 設定為 False,配接器會執行下列查詢: INSERT INTO EMP (EMPNO, ENAME, SAL) VALUES (1000, “John”, null); 請注意,在第二個語句中,配接器會明確插入參數 「SAL」 的 Null 值。 |
bool (System.Boolean) |
UseAmbientTransaction | 交易 | 指定 Oracle 資料庫配接器是否使用呼叫端所提供的交易內容來執行作業。 預設值為 True,這表示配接器一律會在交易內容中執行作業,假設用戶端正在提供交易內容。 如果有其他資源參與交易,連線會在 System.Transaction 中建立,並提升為 MSDTC 交易。 不過,在某些情況下,您可能不希望配接器在交易內容中執行作業。 例如: - 在傳送埠) 上,在 Oracle 資料庫上執行簡單的 SELECT 作業時 (。 - 同時指定執行 SELECT 作業的輪詢語句,但不會透過 DELETE 子句或叫用接收埠) 上的預存程式 (來涉及資料表的任何變更。 這兩個作業都不會對資料庫資料表進行任何更新,因此,提高這些作業以使用 MSDTC 交易可能是效能額外負荷。 在這種情況下,您可以將系結屬性設定為 false,讓 Oracle 資料庫配接器不會在交易內容中執行作業。 注意: 對於不會對資料庫進行變更的作業,建議不要在交易內容中執行作業。 對於更新資料庫中資料的作業,建議您將系結屬性設定為 true,否則,視您執行輸入或輸出作業而定,可能會遇到訊息遺失或重複的訊息。 |
bool (System.Boolean) |
GeneratedUserTypesAssemblyFilePath | UDT .NET 類型產生 – 設計階段 | 指定配接器產生之 DLL 的名稱和路徑,同時產生中繼資料,其中包含中繼資料中使用的所有 UDT。 如果您要為使用 UDT 的封裝、預存程式或函式產生中繼資料,則必須指定 DLL 名稱。 針對具有 UDT 的資料表和檢視表,指定 DLL 名稱是選擇性的。 產生的 DLL 會儲存到與可執行檔相同的位置。 只有在產生中繼資料時,才需要此系結屬性。 注意: 您只能指定一個檔案名。 針對中繼資料中的所有 UDT,配接器會產生具有指定名稱的單一檔案。 如果您未指定名稱,配接器會產生具有 GUID 名稱的 DLL。 設定WCF-OracleDB接收或傳送埠時,BizTalk Server無法使用這個系結屬性。 |
字串 |
GeneratedUserTypesAssemblyKeyFilePath | UDT .NET 類型產生 – 設計階段 | 指定配接器用來建立強型別元件之金鑰檔的名稱和路徑。 這個系結屬性是選擇性的,而且只有在產生中繼資料時才需要。 注意:設定WCF-OracleDB接收或傳送埠時,BizTalk Server無法使用這個系結屬性。 |
字串 |
UserAssembliesLoadPath | UDT .NET 類型產生 – 執行時間 | 指定 DLL 的名稱,並以分號分隔,配接器會在產生中繼資料時建立。 這些 DLL 會儲存在您為 GeneratedUserTypesAssemblyFilePath 系結屬性指定的位置,同時產生中繼資料。 您必須手動將這些 DLL 複製到下列位置: 對於 BizTalk 專案:複製與 BTSNTSvc.exe 相同位置的 DLL。 針對 BizTalk Server,這通常位於安裝磁片磁碟機 > :\Program Files\Microsoft BizTalk Server下 < 。 針對 .NET 專案:將 DLL 複製到 .NET 專案資料夾內的 \bin\Development 資料夾。 只有在傳送和接收訊息以在 Oracle 資料庫上執行作業時,才需要此系結屬性。 |
字串 |
AcceptCredentialsInUri | [取用配接器服務增益集] 或 [新增配接器服務參考外掛程式] 未顯示。 | 指定 Oracle 連線 URI 是否可以包含 Oracle 資料庫的使用者認證。 預設值為 False,這會停用連線 URI 中的使用者認證。 如果 AcceptCredentialsInUri 為 False ,且 Oracle 連線 URI 包含使用者認證,則 Oracle 資料庫配接器會擲回例外狀況。 如果您必須在 URI 中指定認證,您可以將 AcceptCredentialsInUri 設定為 True 。 如需詳細資訊,請參閱 建立 Oracle 資料庫連線 URI。 | bool (System.Boolean) |
如何設定 Oracle 系結屬性?
當您指定與 Oracle 資料庫的連線時,可以設定 Oracle 系結屬性。 如需如何在下列情況下設定系結屬性的相關資訊:
使用取用配接器服務 BizTalk 專案增益集或新增配接器服務參考 Visual Studio 外掛程式,請參閱 使用取用配接器服務連線至 Visual Studio 中的 Oracle 資料庫。
重要
使用取用配接器服務 BizTalk 專案增益集或新增配接器服務參考 Visual Studio 外掛程式時,如果您未針對字串類型的系結屬性指定值,且其預設值為 null,則系結檔案中將無法使用該系結屬性, (XML 檔案) 或 app.config 檔案。 如有必要,您必須在系結檔或 app.config 檔案中手動新增系結屬性及其值。
在BizTalk Server解決方案中設定傳送埠或接收埠 (位置) ,請參閱手動設定 Oracle 資料庫配接器的實體埠系結。
在程式設計解決方案中使用 WCF 通道模型,請參閱 使用 Oracle 資料庫建立通道。
在程式設計解決方案中使用 WCF 服務模型,請參閱 設定 Oracle 資料庫的用戶端系結。
使用 WCF ServiceModel 中繼資料公用程式工具 (svcutil.exe) ,請參閱 搭配 BizTalk Adapter for Oracle Database 使用 ServiceModel 中繼資料公用程式工具。