2014年5月10日 星期六

oracle client 安裝 - 在SQLServer建立Linked Server

在SQL2008 R2或SQL2012要建立ORACLE 10gR2 linked server

原本用ODBCX64先建立連線,但一直有以下的錯
[Oracle][ODBC][Ora]ORA-12154: TNS:could not resolve the connect identifier specified

GOOGLE後,大都是說需要再安裝X64的ORACLE CLIENT,覺得好麻煩,再找了一下相關資源後,發現應該只需要在那台SQL SERVER 主機安裝ORACLE ODAC應就可以連結ORACLE了。

參考: Installing 64-bit Oracle ODAC 11.2 to Microsoft SQL Server 2008 R2 x64

記錄一下設定方法.

先去ORACLE網站下載ODAC xcopy版
原本先下載12c Release 但建好連結後,卻有"ORA-03134: Connections to this server version are no longer supported."的錯,所以就下載11.2 Release 6的版本

64-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows x64


解壓縮後,因為我只需要安裝ORACLE OLEDB(在SQL SERVER 2008R2的Linked Servers Providers下要可看得到OraOLEDB.Oracle) ,所以在DOS下執行以下安裝指令即可,其中安裝目錄是自已訂的
install.bat oledb c:\oracle_odac true

其他安裝指令可參考解壓縮後目錄ODAC112040Xcopy_64bit下的readme.htm有安裝說明。


按照參考文章的說法,還要做以下設定
1.在系統環境變數下設定一個變數 ORACLE_HOME = C:\oracle_odac,並在Path變數下加入以下C:\oracle_odac;C:\oracle_odac\bin; 
2. 打開regedit 在HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_true 下,加入FetchSize =1000 (我是建QWord 64位元)

再將tnsnames.ora copy到c:\oracle_odac\network\admin\下,tnsnames.ora內容如下

ORAC=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORACDB)
    )
  )


接著執行以下tsql建立Linked Server

exec sp_addlinkedserver  
'ORAServer',   --@server 就是linked server名稱
'Oracle',  --@srvproduct 隨便寫通常會寫DB產品
'OraOLEDB.Oracle',   --@provider使用哪種provider
'myOracle' --@datasrc 要連結的Database name

再建立登入oracle的帳密

exec sp_addlinkedsrvlogin 'ORAServer', 'FALSE',NULL, 'user_name', 'user_password'

然後在Linked Servers Providers下的OraOLEDB.Oracle,按右鍵點選Properties,進入後,將Allow inprocess 選項勾選起來 ,若不勾選,則執行時會有以下錯誤

Msg 7302, Level 16, State 1, Line 1
無法建立連結伺服器 "accs" 的 OLE DB 提供者 "OraOLEDB.Oracle" 的執行個體。


最後重啟動SQL SERVER,然後下一段sql 測試一下

select * from openquery(ORAServer,'select * from all_tables')

應該就可順利查詢了。


ps.如果有安裝PL/SQL Developer工具,則需使用32bit的元件才能連線

32-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows X86 
建立另一個目錄進行安裝即可,例  install.bat oledb c:\oracle_odac32 true
然後在系統環境變數建立另一個ORACLE_HOME32 變數及path。
在regedit下的機碼位置為HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_true。

安裝後,開啟 PL/SQL Developer ,在Tools\Preferences\Connection下設定Oracle Home = ORACLE_HOME32及OCI library=C:\oracle_odac32\oci.dll
然後再重開PL/SQL Developer應可正常連線。
   
 






2014年4月9日 星期三

RDLC Subreport 讀取

設計RDLC時,通常都是習慣先在BISD(後來改叫SSDT) 建一個報表專案,然後撰寫SQL設計LAYOUT確認報表內容沒問題後再將

讀取MAIN RDLC應該不是問題

 讀取子報表,只需在原來讀取MAIN RDLC的程式碼加入以下

ReportVierwe1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubReportData);

ReportViewer1.LocalReport.Refresh();

void SetSubReportData(object sender, SubreportProcessingEventArgs e)
 {

        int sn = int.Parse(e.Parameters["p_sn"].Values[0]); //子表傳遞參數值
      
        string dsname= string.Empty; //每張子表的datasetname,不同子表要給不同名
      
        DataTable dtsource =new DataTable();//報表資料來源,這里是用datatable回傳型態

        switch(e.ReportPath)  //依子表名稱(rdlc的檔名)來讀取資料
                {
                    case "rdlcname1":
                         dsname = "DS1"; //dataset name in rdlc
                         dt = datasource1; //your sql data table ,code by self
                      break;
                    case "rdlcname1":
                         dsname = "DS2"; //dataset name in rdlc
                         dt = datasource2; //your sql data table ,code by self
                      break;
                 }

           e.DataSources.Add(new ReportDataSource(dsname,dt ));  //設定來源

}

2014年3月25日 星期二

SQL Server 不允許遠端連接

一台機器,原本裝了SQL Server 2005 Express, Instance Name 為ABC。(port:1433)

後來,在同一台機器上又裝了SQL Server 2005 Standard+SP4,Instance Name為XYZ。(port 1533)

結果當由外部透過另一台機器的SSMS連線到XYZ時,出現了以下的訊息

在建立連接至伺服器時發生錯誤。當連接至 SQL Server 2005 時,失敗的原因可能是,在預設設定下,SQL Server 不允許遠端連接。 (provider: SQL 網路介面, error: 26 - 搜尋指定的伺服器/執行個體時發生錯誤) (Microsoft SQL Server, 錯誤: -1)


先檢查防火牆,該機器皆有設定以上的例外連接埠。
再查看SQL SERVER DAC也是有開啟的。


後來再試了幾台機器的SSMS都有相同的錯誤,只有其中一台機器可正常連線。

利用netstat-b查看連接埠,確定都是1533。

後來只好在伺服器以指定連接埠的方式連線,像這樣

192.168.0.111\XYZ,1533

就可以正常登入了。

2014年3月20日 星期四

WindowsXP SP2 SSL 網站無法連線

最近一個新系統上線後,有些人連登入頁都看不到,出現無法連線。

都是WINXP+IE8 的環境。 但同樣的環境有人可以看得到首頁有人則不行。

模擬了可能的VM環境測試也都很正常。

無意中發現只要是WINXP SP2的環境都有問題,升級到SP3後就都正常了。

後來看到這篇文章,才知道WINXP SP2不支援SHA2。

SHA2 and Windows

因為網站申請的SSL是SHA2 2048位元,WINDOWS XP SP2以前是不支援SHA2功能的。

到GCA網站問與答即可查到
15 請問SHA2憑證之支援性為何?







2014年1月6日 星期一

informix GLS-cr

informix DB 版本 更新到IBM Informix Dynamic Server Version 11.50.FC9

無法查詢條件 like '許%'

因為許這個字的low byte 為\,造成系統誤判後頭字元為保留字,所以無法正確查詢。

更新DB後需再次安裝GLS以確保中文查詢正確。

2013年12月25日 星期三

XCOPY在工作排程0x4問題

建了一個工作排程,定時執行batch檔。
batch中寫了一段xcopy,主要針對有異動較新檔案時才複製。

echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set datestamp=%dt:~0,8%
set timestamp=%dt:~8,6%
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set HH=%dt:~8,2%
set Min=%dt:~10,2%
set Sec=%dt:~12,2%

set stamp=%YYYY%%MM%%DD%.log

echo %date% %time% 'copy file' >> d:\Schedule_Sync\%stamp%
xcopy x:\files\*.mp4 y:\files\ /d /y >> d:\Schedule_Sync\%stamp%


x:\及y:\分別是二台網路連線磁碟機

原先建立好排程執行結果都為0x0
有一天更改了二台主機的密碼後,執行結果就變成了0x4。

於是先在DOS COMMAND , 輸入 control keymgr.dll 重新指定一次網路磁碟機密碼

但排程執行結果仍舊是0x4

試了幾天,最後把原本的排程刪掉重建後,竟然就正常了。

吐血~again......

2013年12月22日 星期日

FortiGate SslvpnClient4 command line

FortiSSLVPNclient.exe command line parameters

Usage: FortiSSLVPNclient <subcommand> [options] [args]

Available subcommands:
    connect        - Start a connection
    disconnect    - Disconnect from your session

To start a connection, enter the follwoing command:
    FortiSSLVPNclient  connect    [-s <connection settings name>]
                [-h <sslvpn server>[:<port>]]
                [-u <sslvpn username>[:<password>]]
                [-c <certificate subject>[:<issuer>]]

To disconnect from your session, enter the following command:
    FortiSSLVPNclient.exe disconnect

IIS 網站無法下載中文檔名檔案因為取消高位元字元

 網址+中文檔案名稱方式下載檔案顯示 404 - 找不到檔案或目錄。 但英數字檔案名稱則可下載。 因為設定GCB IIS,其中1項 將高位元字元預設取消勾選了。 27 TWGCB-04-014-0028 要求篩選與其他限制模組 允許高位元字元 這項原則設定決定查詢...