Microsoft SQL Serverの開発:Unixの方法

こんにちは、Habr!



ビジネスロジックの全体または重要な部分がDBMSのストアドプロシージャに実装されている中規模および大規模プロジェクトでは、モジュールのコードを管理する上で多くの不便があります。 すなわち:



はい、これらの問題を全体的または部分的に解決する商用製品がありますが、著者の意見では、これは効率的でもエレガントでもありません。 これを考慮して、データベースモジュールと構造のファイルシステムへのマッピングは、 SQLFuseプロジェクトのFUSEユーザー空間のファイルシステム)を使用して実装されます。 これで、 Unixウェイのフォロワーがここを通過できるようになります。



実験データベースをマウントするための一連のアクションを検討してください。



取り付け準備



ビルドしてマウントするには、次のソフトウェアが必要です。



FUSEカーネルモジュールがロードされていることを確認します。

modprobe -a fuse
      
      





ソフトウェアをインストールしたら、gitリポジトリのクローンを作成する必要があります。

 git clone https://github.com/AlexandrMov/SQLFuse.git
      
      





プロジェクトのアセンブリは、次のコマンドによって実行されます。

 make clean make
      
      







カスタマイズ



コンパイルとアセンブリが成功した場合は、 sqlfuse.conf構成ファイルを構成する必要があります。これは、クローンリポジトリのconfディレクトリにあります。

  #   ,     [global] #   maxconn=1 #  ,     SQL Server appname=SQLFuse #    [AdventureWorks2008R2] #    / SQL Server servername=192.168.6.50 #   dbname=AdventureWorks2008R2 #  ,   sqlfuse.auth.conf auth=advauth
      
      





authパラメーターは、 sqlfuse.auth.confファイルで定義されたグループ名を参照します。

  #    [advauth] #   username=fuse #   password=123
      
      





sqlfuse.auth.confファイルのauthパラメーターの代わりに、 sqlfuse.confファイルのユーザー名パスワードの定義が許可されます。 これは意図的に行われたものではありません。作成者は接続プロファイルを編集する際に妄想的であるため、誰かがユーザーのパスワードを盗み見ることができます。

サーバーインスタンス、たとえばSQLServer \ SQLEXPRESSを指定する場合、 \文字はエスケープできません。 Active Directoryを介してログインする必要がある場合、これはユーザー名パラメーターにも当てはまります。


AdwentureWorks2008R2データベースを接続する必要があり、選択したユーザーがSQL Serverモジュールを変更するために必要なすべての権限を持っていることを忘れないでください。



既知の問題



エンコードに問題がある場合は、変換の方向指定するto_codesetおよびfrom_codesetパラメーター使用してみてください。

 from_codeset=UTF-8 to_codeset=CP1251
      
      





このエラーが発生した場合:

Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.





ansi_npw = trueパラメーターを使用して、 QUOTED_IDENTIFIER、ANSI_NULLS、ANSI_WARNINGS、ANSI_PADDINGSオプション強制的オン状態にします。



取り付け



クローン化されたSQLFuseリポジトリのルートにadvworksフォルダーを作成し、データベースをマウントします。

 mkdir advworks ./sqlfuse -o profilename=AdventureWorks2008R2 ./advworks
      
      





-dオプションを使用すると、SQL Serverによって生成されたエラーを監視できます。

 ./sqlfuse -d -o profilename=AdventureWorks2008R2 ./advworks &> ./advworks.log &
      
      







モジュールの基本アクション



サーバーオブジェクトに対するいくつかの簡単なアクションの例を挙げましょう。



したがって、モジュールの管理とナビゲーションは、ファイルのある通常のディレクトリのようになります。バージョン管理システム、パッチ、お気に入りのコードエディタを使用できます。つまり、UNIXの哲学全体がSQL Serverでも利用できます。

切り捨て操作はまだサポートされていないことに注意してください-これはコマンドの実行を意味します
 echo " NOT NULL" >> TestColumn
      
      



失敗します。 ファイルシステムレベルでブロックされていますが、列の再作成とデータ損失につながる可能性があるため、操作は推奨されませんでした。



編集する前に、常にモジュールのオリジナルを保持してください!



モジュールの説明を間違えた場合、または接続が切断された場合、ファイルシステムは-EFAULT (「 無効なアドレス」)エラーを返します。



サポートされているモジュール



投稿が作成された時点で、SQLFuseは読み取り/書き込み用に次のモジュールをサポートしていました



読み取り専用の スキーム、テーブル、ビューが利用可能ですFOREIGN KEY、PRIMARY KEY、およびインデックス 制約 まったく表示されません 。 空き時間があれば、この機能を追加します。



混乱とより柔軟なモジュール管理を避けるために、T-SQL構文を少し単純化する必要がありました。 制約と列の定義で、テーブル記述の冗長性が削除されたことを除いて、すべてが同じままでした。 定義は次のようになります。



宛先テーブルに関する指示がコメント化されている部分では、SQLFuseはモジュールファイルの場所に基づいて、必要なコードの置換を自動的に行います。 ファイルのテキストで定義されているモジュールの名前は何の役割も果たしません;必要に応じて、ファイル、スキーマ、および/またはテーブルの名前に置き換えられます。 モジュールのテキストには、複数のコマンドパッケージを含めることはできません。 行く



エピローグまたは次は何ですか?



空き時間を受け取ったら、実装する計画:



このアイデアに興味があり、開発に参加したい人は大歓迎です。すべてのソースコードはGPLv3ライセンスの下で利用可能です。 著者は、コメントや提案を喜んでいます。



PS興味がある人は、FUSEでユーザーモードファイルシステムを開発した経験についてお話しできます。



データソース






All Articles