ティベロとの私の冒険の最初の部分
は こちらですTiberoと
Oracleの互換性をテストするために、お気に入りの
PL / SQLライブラリが動作するかどうかを確認することにしました。
https://github.com/mortenbra/alexandria-plsql-utils/JSON_UTIL_PKGでテストを開始し
ました 。 JSON応答をすばやく生成できる非常に便利な機能。
そしてそう
wget https://raw.githubusercontent.com/mortenbra/alexandria-plsql-utils/2213e3df2f24a00322239d442c54bf31039f2588/setup/types.sql wget https://raw.githubusercontent.com/mortenbra/alexandria-plsql-utils/master/ora/json_util_pkg.pks wget https://raw.githubusercontent.com/mortenbra/alexandria-plsql-utils/master/ora/json_util_pkg.pkb
生活を簡素化するには、pkbファイルの先頭に追加します
set define off
types.sqlが正常にインストールされました。
パッケージをインストールするときに、予期せず問題が発生しました。
Oracleでこれらの3つのファイルのインストールがコンパイル済みパッケージの受信でスムーズに行われた場合、
tiberoの場合、パッケージ本体に入力するときに次の出力を受け取りました。
tbsql sys/syspass @json_util_pkg.pkb tbSQL 5 SP1 TmaxData Corporation Copyright (c) 2008-. All rights reserved. Connected to Tibero. Warning: PACKAGE BODY created with compilation errors. File finished.
電話で
show errors
エラーが出る
TBR-15046: Identifier is out of scope. at line 251, column 5: dbms_xmlgen
dbms_xmlgenパッケージが
tiberoに ないことが
わかりました 。 この問題に直面して、DBMS%パッケージが実際に何であるかを確認することにしました。 リクエスト
select distinct name from all_source where name like 'DBMS%' order by 1
次のリストを入手しました
DBMS_APM | DBMS_APM_INTERNAL | DBMS_APPLICATION_INFO | DBMS_CRYPTO |
DBMS_DEBUG | DBMS_DEBUG_JDWP | DBMS_ERRLOG | DBMS_EXPRESSION |
DBMS_FLASHBACK | DBMS_GEOM | DBMS_JAVA | DBMS_JOB |
DBMS_JOB_WITH_NAME | DBMS_JOB_WITH_NAME_INTERNAL | DBMS_LOB | DBMS_LOCK |
DBMS_METADATA | DBMS_MVIEW | DBMS_MVIEW_REFRESH_UTIL | DBMS_MVIEW_UTIL |
DBMS_OBFUSCATION_TOOLKIT | DBMS_OUTPUT | DBMS_PIPE | DBMS_RANDOM |
DBMS_REDEFINITION | DBMS_REDEFINITION_STATS | DBMS_REPAIR | DBMS_RESULT_CACHE |
DBMS_ROWID | DBMS_SESSION | DBMS_SPACE | DBMS_SPACE_ADMIN |
DBMS_SPH | DBMS_SPH_INTERNAL | DBMS_SQL | DBMS_STATS |
DBMS_STATS_INTERNAL | DBMS_STATS_UTIL | DBMS_SYSTEM | DBMS_TRANSACTION |
DBMS_TYPES | DBMS_UTILITY | DBMS_VERIFY | DBMS_XMLGEN |
DBMS_XPLAN |
私のバージョンの
オラクルでは合計45対195です。 悲しいですね。
Oracleで使用しなければならなかったパッケージのうち、
DBMS_SCHEDULER 、
DBMS_XMLDOMなどが不足しているのはイライラします。
tibero dbmsに含まれていない150のリストの多くは、それら
から 欠落 しているパッケージを見つけると
思い ます 。
しかし、最も興味深いのは、エラーが発生した
dbms_xmlgenパッケージが
Tiberoに存在することです。 問題は、パッケージに
setmaxrows関数がないこと
でした 。
作ることにより
desc dbms_xmlgen
Tiberoでこのパッケージコンテンツを
取得しました関数変換(XMLDATAのVARCHAR、数値のフラグ)はVARCHARを返します
|
関数変換(CLOBのXMLDATA、数値のフラグ)はCLOBを返します
|
FUNCTION NEWCONTEXT(VARCHARのクエリ)戻り値
|
関数NEWCONTEXT(REF CURSORのクエリ)の戻り値
|
手順SETNULLHANDLING(番号のCTX、番号のフラグ)
|
手順CLOSECONTEXT(CTX IN NUMBER)
|
関数GETXML(CTXの番号、DTDORSCHEMAの番号)はCLOBを返します
|
戻り値CLOBの関数GETXML(VARCHARのSQLQUERY、NUMBERのDTDORSCHEMA)
|
プロシージャGETXML(CTX IN NUMBER、TMPCLOB IN OUT CLOB、DTDORSCHEMA IN NUMBER)
|
上記からわかるように、
Tiberoにはパッケージだけでなく、その中に手順もあります。 標準の
Oracleパッケージを
使用するパッケージはコンパイルされない可能性が高いため、完成した
Oracle製品の
Tiberoへの移行は非常に困難である可能性が高いことが
わかります。
このような結果を受け取ったので、
DBMS_LOBと
DBMS_LOCKの 2つのパッケージをさらに詳しく調べることにしました。
PL / SQL開発者の間で最も人気があるように思われるので、それらが選ばれました。
DBMS_LOB。比較の結果、すべての基本機能が存在することが
わかりましたが 、
Tiberoでフラグメントを操作することはできません
。DBFS_LINKsも、便利な方法もありません。 ドライに言えば、
tiberoの
DBMS_LOBパッケージには次のメソッドが含まれていません。
COPY_DBFS_LINK | COPY_FROM_DBFS_LINK | DBFS_LINK_GENERATE_PATH | FRAGMENT_DELETE |
FRAGMENT_INSERT | FRAGMENT_MOVE | FRAGMENT_REPLACE | げっちゅ |
Getconntentpe | Getoptions | GET_DBFS_LINK | GET_DBFS_LINK_STATE |
GET_DEDUPLICATE_REGIONS | GET_STORAGE_LIMIT | ISSECUREFILE | LOADBLOBFROMFILE |
LOADCLOBFROMFILE | LOADFROMFILE | MOVE_TO_DBFS_LINK | SETCONTENTTYPE |
設定 | SET_DBFS_LINK |
DBMS_LOCKは完全に実装されています。
UTL_%パケットの場合、状況は
DBMS_%に近いです。
Tiberoでは合計で11個のパッケージが提供されています。 8(
UTL_ENCODE 、
UTL_FILE 、
UTL_HTTP 、
UTL_I18N 、
UTL_MATCH 、
UTL_RAW 、
UTL_TCP 、
UTL_URL )は標準の
Oracleパッケージに似ていますが、残りの3つは独自のものです。
Oracleには21個のパッケージがあるため、次の13個のパッケージは
Tiberoに実装されていません。
UTL_CALL_STACK | UTL_COLL | UTL_COMPRESS | UTL_GDK |
UTL_IDENT | UTL_INADDR | UTL_LMS | UTL_NLA |
UTL_RECOMP | UTL_REF | UTL_SMTP | UTL_SYS_COMPRESS |
UTL_XML |
Tiberoが
XMLをそれほど嫌うのはなぜだろうか...
ライブラリの状態はあまり楽観的ではありません。 しかし、常にではありませんが、
DBMSおよび
UTLパッケージを使用します! 時々、十分な標準機能があり、それらを使用してすべてが多少楽観的です。
TMaxは 、サポートされている機能のリストを積極的に拡大しており、現在、次のメソッドのリストを着実にサポートしています。
数学ABS | アコス | アシン | アタン | ATAN2 |
平均 | Bitand | セイル | コス | コッシュ |
COUNT | EXP | フロア | Ln | ログ(M、N) |
MOD | 力 | ラウンド | サイン | 罪 |
シン | SQRT | タン | タン | TRUNC |
行連結 | CHR | 下 | 上部 | LPAD |
LTRIM | Rtrim | RPAD | SUBSTR | 交換 |
INITCAP | NLS_INITCAP | NLS_SORT | 翻訳する | TO_CHAR |
アスキー | INSTR | 長さ | 長さ |
日程+整数 | -日付 | ADD_MONTHS | CURRENT_DATE |
CURRENT_TIME | CURRENT_TIMESTAMP | LAST_DAY | NEW_TIME |
NEXT_DAY | ラウンド | TRUNC | 抽出物 |
SYSTIMESTAMP | MONTHS_BETWEEN | TO_CHAR | TO_NUMBER |
TO_DATE | TO_DSINTERVAL | SYSDATE |
オフィス最高の | 少なくとも | キャスト | 変換 |
ヘキソチャー | ROWIDTOCHAR | TO_CLOB | TO_LOB |
デコード | ダンプ | VSIZE | 併合 |
Lnnvl | ヌリフ | NVL | NVL2 |
all_proceduresでリクエストを行うと、さらに多くの関数が表示されますが、公式ドキュメントには記載されていません。
上記の結果が得られた後、私は複雑なパッケージをダウンロードすることは意味がないと判断しました。ほとんどの場合、問題は同様であり、特定のパッケージの欠如にかかっています。 しかし、
DBMSパッケージや複雑な機能がなくても簡単に実行できるシンプルなシステムがありますので、そのようなシステムを転送する際に発生する可能性のある問題を評価することにしました。 このために、HRスキームの例を取り上げました。
彼女はここから連れて行かれました:
http://www.oracle.com/technetwork/developer-tools/datamodeler/hr-30-ddl-246035.zipこのスクリプトの実行により、
Oracleの ddlのサポートが
不完全であることが明らかになりました。
問題番号1 ALTER TABLE JOB_HISTORY ADD CONSTRAINT JHIST_DATE_CHECK CHECK (end_date > start_date) INITIALLY IMMEDIATE ENABLE VALIDATE ;
エラーが発生します。
TBR-7001: General syntax error. at line 4, column 9: INITIALLY IMMEDIATE
詳細については、ドキュメントでこれを設定する方法が見つかりませんでした。 しかし、テストで判断すると、
DEFERRABLE値に従って
機能します。 しかし、それには微妙な違いがあります(問題2を参照)
問題番号2 ALTER TABLE COUNTRIES ADD CONSTRAINT COUNTR_REG_FK FOREIGN KEY ( REGION_ID ) REFERENCES REGIONS ( REGION_ID ) NOT DEFERRABLE ;
エラーが発生します。
TBR-7001: General syntax error. at line 10, column 5: NOT DEFERRABLE
繰り返しますが、
制約の作成に関するドキュメントは見つかりませんでしたが、実際には、遅延制約が必要な場合は
DEFERRABLEを記述し、この制約を常に確認したい場合は何も指定しません(これはデフォルト値です)。
スキームが作成され、スクリプトを実行してDBMSの機能をテストできるようになりました。 私はここからスクリプトを取りました:
http://www.srikanthtechnologies.com/oracle/dec9/hrqueries.html問題番号3リクエスト:
SELECT SYSDATE - to_date('01-jan-2011') FROM DUAL
エラーを与えます:
TBR-5113: Invalid month value 'jan-2011'. (01-jan-2011)
Tiberoの正しいリクエストは次のとおりです。
SELECT SYSDATE - to_date('20110101') from dual
この些細なことは、開発の主な方向性の1つが
Oracleとの互換性であると同社が主張しているため、問題に思え
ます 。 また、互換性は高品質のコードをサポートするだけでなく、不良コードの正しい動作もサポートします。
Oracleでデフォルトで機能するものがある場合、このようなポリシーを使用すると、
Tiberoでデフォルトで機能することが期待されます。
これらのスクリプトから他のエラーを取得できませんでした。 ピボット、さまざまな結合表記、階層クエリを個別にチェックしました。すべてが機能し、
パイプライン関数が奇妙に機能し、すべてが接続されています。 簡単な例を示します。
問題番号4型を作成します
CREATE OR REPLACE TYPE TEST_TYPE IS OBJECT( TESTYPE NUMBER ); CREATE OR REPLACE TYPE TEST_TYPE_TABLE IS TABLE OF TEST_TYPE;
関数発行テーブルを作成します
CREATE OR REPLACE FUNCTION TEST_FUNCTION(PARAM IN NUMBER) RETURN TEST_TYPE_TABLE IS RSLT TEST_TYPE_TABLE; BEGIN RSLT := TEST_TYPE_TABLE(); RSLT.EXTEND; RSLT(RSLT.LAST) := TEST_TYPE(PARAM); RETURN RSLT; END;
私はリクエストをします:
SELECT * FROM TABLE( test_function( 2 ) )
受け取った:
TBR-8051: User-defined functions are not permitted in the expression. at line 1, column 23: select * from table( test_function(2) )
私は状況を修正しようとしました:
select * from table( cast(test_function(2) as test_type_table) )
結果はさらに悪いです:
TBR-8021: Invalid table name. at line 1, column 47: select * from table( cast(test_function(2) as test_type_table) )
しかし、このメーカーはそれを直そうとしていますが、今のところ私たちは持っています。
問題番号5データベースマネージャーの接続。 これが問題全体であり、タンバリンで踊る。 ほとんどはデータベースと通信したくないか、設定があまり明確ではありません。 製造業者は
tbrliboci.dllになることを約束していますが、今のところそうではありません。
問題番号6Oracle Forms 9を
Tiberoに接続しようとしました。 接続中にチェックサムエラーが発生しました。 それ以上進むことはできませんでした。
問題番号7dbms_xplan.displayなしでExplain Planを使用するのはかなり苦痛
でした 。
テストの結果、既製のパッケージといくつかの既製の
PL / SQLシステムをロードすることによると、かなりシンプルで軽量なシステムは十分に許容されると言えます。 すべてが機能し、問題はありません。 あなたはそれを0で書くことができ、おそらく、非常にうまくいきます。 もちろん、あなたが英語を知っていて、何かが
Oracleと同じように機能することを我慢する準備ができていない限り。 オンラインストア、ABS銀行、倉庫会計システム、パッケージの問題、
パイプラインの貧弱な作業などの大規模システムの場合、移行プロセスは痛みを伴い、完成したコードの書き換えを伴います。
一般的に、この製品には生存の可能性があるように思えます。 そして今、最初の部分で述べたように、彼と協力しているロシアの会社があります。 私たちはそこで働いていますが、ロシア語には賢明な情報はありません。 したがって、この製品の周りのロシア語を話す人々のコミュニティに、このTibero
subの経験を提案、支援、または共有し始めてほしいです。
PS執筆に協力してくれたPeter Zhitnikovに感謝します。