顯示具有 Oracle 標籤的文章。 顯示所有文章
顯示具有 Oracle 標籤的文章。 顯示所有文章

2020年3月3日 星期二

Python: 使用cx_Oracle擷取Oracle DB資料

以Python使用cx_Oracle擷取Oracle DB資料.

找了參考資料, 安裝cx_Oracle後, 不管怎麼測試, 都出現同樣問題:

  DPI-1072: the Oracle Client library version is unsupported

原先就有安裝Developer 10g和instantclient 10.2, 可能真的太舊, 再安裝instantclient 19.5, 還是同樣狀況. 結果是path的設定造成, 因為python可能先找到較舊的版本, 所以要把19.5的路徑放在最前面.

第1關過了, 再來第2個問題:

  無法找到程序輸入點GetOverlappedResultEx(在動態連結程式庫KERNEL32.dll)



這有點麻煩, 看了多篇文章才找到原因: Windows 7不支援...

找台Windows 10試試, 果然正常, 有Windows版本問題真的傷腦筋, 要特別注意.

擷取資料沒問題, 其他的就單純了.


Ref:
1.How to Connect Python to Oracle Database using cx_Oracle
https://datatofish.com/how-to-connect-python-to-an-oracle-database-using-cx_oracle/

2.Python Test API - 用python連線Oracle資料庫並操作
https://www.itread01.com/content/1542186427.html

3."DPI-1072: the Oracle Client library version is unsupported" with python3.7.2 and instantclient_19_3/instantclient_12_2 on win10
https://github.com/oracle/python-cx_Oracle/issues/384

4.GetOverlappedResultEx could not be located in kernel32.dll
https://stackoverflow.com/questions/33922025/getoverlappedresultex-could-not-be-located-in-kernel32-dll

5.结合使用 Oracle Database 11g 和 Python
https://www.oracle.com/technetwork/cn/tutorials/229069-zhs.htm#app

2020年1月29日 星期三

Oracle: Report runtime背景執行方式

問題: 長久以來, 有個Oracle reports的客製程式, 在forms中以host執行rwrun60的方式, 定期排程把資料輸出至印表機, 但不定時會出現rwrun60卡住, 導致後續資料也都停著未處理

治標: 現行方式, 用windows上的指令, 以taskkill暴力清除rwrun60.exe, 目標有達成, 副作用是有時會誤砍還正在執行中的reports runtime, 又要再人工處理

有想過若host能指定背景執行, 或許就不會卡住, 但host指令沒有這類參數.

再看了看reports的文件, 或許還有其他變通作法.

目前想到的可能方式;
1.改為使用run_product指令進行
2.在report執行時, 指定 BACKGROUND=YES
3.host中改為呼叫rwrbe60, 依Oracle文件所述, 這會較有效率, 且參數與rwrun60相同

找時間再試吧.


Ref:
1.Oracle Reports Reference - Release 6i
https://docs.oracle.com/pdf/A73174_01.pdf
p.596, BACKGROUND (RWRUN60)


2017年8月11日 星期五

Oracle: 在64位元Windows 7環境下安裝D2K 6i Runtime

1. 安裝Forms runtime, 指定路徑至C:\D2K6I, 選Oracle Forms Developer
2. 只安裝Runtime, 所以選Custom


3. 選取Forms Runtime項目, 並點擊[Install]

4. 安裝Reports runtime
  程序與安裝Forms runtime相同, 但選項改為[Oracle Reports Developer]


5. 安裝D2K 6i patch 13, 只針對Forms Runtime及Reports Runtime


6. 更改registry, 把NLS_LANG設定為AMERICAN_AMERICA.ZHT16BIG5

7. 複製NN60.DLL及NNB60.DLL至C:\D2K6I\BIN, 原有檔案可分別更名為NN60_orig.DLL及NNB60_orig.DLL以作辨識


Reference:
http://oracleforms.blogspot.tw/2008/04/oracle-forms-6i-en-windows-de-64-bits.html

2017年4月24日 星期一

ORA-06502: PL/SQL: numeric or value error: host bind array too small

用來發通知信的程式, 不定時會出現這error, 看訊息以為是mail server的名稱有誤, 但這名稱都固定沒變, 不應該會有異常. 由於程式中看不出其他問題, 先把用於查看收件人的dbms_output取消, 治標試試.

在網路搜尋, 找到兩篇提到dbms_output.put_line有255字元的限制, 但在client工具或sqlplus直接測試, 現行系統在超過300字元時也都正常.

只能再觀察了.

Ref:
ORA-06502: Host bind array to small (web service callout)
http://www.orafaq.com/forum/mv/msg/84834/441910/#msg_441910

long messages cause ORA-06502: PL/SQL: numeric or value error: host bind array too small
https://github.com/rlove/pluto-test-framework/issues/3

2016年8月30日 星期二

MS Access連結Oracle DB error: "保留錯誤 (-7732);這個錯誤並無訊息"

為便利資料上傳, 要以Access連結Oracle, 裝好instant client 11, 測試正常.



但實際要連DB時, 出現error: "保留錯誤 (-7732);這個錯誤並無訊息".



搜尋網路, 沒有發現什麼可用的訊息. 但以excel透過ODBC, 則是可正常擷取Oracle DB資料.

試了更改Access的一些設定, 都沒有作用.

想著可能與版本有關, 後來有人試出結果, client原先用11.01有異常, 但改用12.01就正常了.



System:
  Windows 7 專業版 SP1 (64位元)
  Access 2010 (64位元)
  Oracle Client 12.01

為了版本問題浪費一個下午...  Orz...


附註: TNSNAME問題
若名稱上有.world(例如R12.world), 在TNS Service Name欄位只會看到R12, 測試連線會說名稱無法識別, 把tnsname.ora中的.world字樣移除就好了.


2014年12月31日 星期三

Recompiling Invalid Schema Objects

SET SERVEROUTPUT ON SIZE 1000000
BEGIN
  FOR cur_rec IN (SELECT owner,
                         object_name,
                         object_type,
                         DECODE(object_type, 'PACKAGE', 1,
                                             'PACKAGE BODY', 2, 2) AS recompile_order
                  FROM   dba_objects
                  WHERE  object_type IN ('PACKAGE', 'PACKAGE BODY')
                  AND    status != 'VALID'
                  ORDER BY 4)
  LOOP
    BEGIN
      IF cur_rec.object_type = 'PACKAGE' THEN
        EXECUTE IMMEDIATE 'ALTER ' || cur_rec.object_type || 
            ' "' || cur_rec.owner || '"."' || cur_rec.object_name || '" COMPILE';
      ElSE
        EXECUTE IMMEDIATE 'ALTER PACKAGE "' || cur_rec.owner || 
            '"."' || cur_rec.object_name || '" COMPILE BODY';
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.put_line(cur_rec.object_type || ' : ' || cur_rec.owner || 
                             ' : ' || cur_rec.object_name);
    END;
  END LOOP;
END;
/
 
REF: http://oracle-base.com/articles/misc/recompiling-invalid-schema-objects.php 

2014年12月30日 星期二

Oracle: Recompile Invalid Objects


invalid.sql

set heading off;
set feedback off;
set echo off;
set lines 999;


spool run_invalid.sql

select 'ALTER ' || OBJECT_TYPE || ' ' ||
OWNER || '.' || OBJECT_NAME || ' COMPILE;'
from dba_objects
where status = 'INVALID'
and object_type in ('PACKAGE','FUNCTION','PROCEDURE')
;

spool off;

set heading on;
set feedback on;
set echo on;

@run_invalid.sql


REF: http://www.dba-oracle.com/t_recompile_recompliling_invalid_objects.htm