CData Software Blog

クラウド連携のCData Software の技術ブログです。

AWS RDS for SQL Server にリンクサーバーを作成する方法

f:id:sennanvolar44:20210322160850p:plain こんにちは!CData でテクニカルサポートをしている宮本です。

皆さんは AWS RDS for SQL Server に対して、 SSMS の「新しいリンクサーバー」をクリックしたとき、
f:id:sennanvolar44:20210319180731p:plain

このようなエラーが発生したことはありませんか?

f:id:sennanvolar44:20210319180006p:plain
「要求されたダイアログを表示できません。(SqlMgmt)」
「必要な操作を完了できませんでした。この操作を実行するには、sysadmin ロールのメンバーでなければなりません。 (SqlManagerUI)」

以前試したときに遭遇したものの、あまり情報がなく諦めてしまっていたのですが、RDS の場合はストアドプロシージャで作成できることがAWS の公式ページに書かれていました。
aws.amazon.com

今回はその 公式ページに書かれている内容を試して、実際に RDS にリンクサーバーを作成してみたいと思います。

SQL Server(EC2またはオンプレミス)からRDS SQL Server

まずはRDS の DB をリンクサーバーとするパターンです。
RDS のテーブルを EC2 やローカルにインストールした SQL Server の場合は、特に難しいことはなく、リンクサーバーを作成する側(今回はローカル)でサーバーオブジェクト --> リンクサーバーと進み、右クリックして「新しいリンクサーバー」から作成できます。
f:id:sennanvolar44:20210319183359p:plain

データソースに RDS のURL を指定し、 f:id:sennanvolar44:20210319184242p:plain

RDS のログイン情報をセキュリティページで指定します。
f:id:sennanvolar44:20210319184531p:plain

作成後は RDS のテーブルがローカル側 SQL Server のリンクサーバーとして表示されます。これでローカル側からも自由に RDS のテーブルにアクセスできるようになります。
f:id:sennanvolar44:20210319184825p:plain

RDS SQLServerからSQLServer(EC2またはオンプレミス)

では冒頭にもお伝えしたエラーが発生するパターンの、RDS 側にリンクサーバーを作成する方法についてです。
この場合は、先ほどのようなボタンをポチポチと押して作成するのではなく、ストアドプロシージャを実行して作成します。

公式ではこのストアドが記載されていましたので、

-- Using the DNS name for the remote server
EXEC master.dbo.sp_addlinkedserver @server = N’REPLTest2′, @srvproduct=N”, @provider=N’SQLNCLI’, @datasrc=N’repltest2.datacenter.mycompany.com′;
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N’REPLTest2′,@useself=N’False‘,@locallogin=NULL,@rmtuser=N'<username>’,@rmtpassword=‘<password>’;
GO

それに沿って設定値を変更して実行しました。

-- Using the DNS name for the remote server
EXEC master.dbo.sp_addlinkedserver 
    @server = 'localdb_link', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='接続先';

EXEC master.dbo.sp_addlinkedsrvlogin 
    @rmtsrvname='localdb_link',
    @useself='FALSE',
    @locallogin=NULL,
    @rmtuser='admin',
    @rmtpassword='xxxxxxxxxxx';
GO

そうしますと、別の SQL Server のテーブルが RDS SQL Server のリンクサーバーに表示されるようになりました。
f:id:sennanvolar44:20210319190827p:plain

SELECT や UPDATE をしてみる

少し気を付けることころはテーブル名の指定部分ですね。
リンクサーバー名.データベース名.スキーマ名.テーブル名
の順で指定する必要があります。

f:id:sennanvolar44:20210322155020p:plain

テーブル名さえ気を付ければ、UPDATE も INSERT も DELETE もできるようになりますね。
f:id:sennanvolar44:20210322155433p:plain

UPDATE 後。
f:id:sennanvolar44:20210322155610p:plain

おわりに

今回は SQL Server 同士でリンクサーバーを構成してみましたが、CData では以下のような構成をとることで、 AWS RDS for SQL Server のリンクサーバーに SaaS データを連携させることができます。

CData ODBC Driver の SQL Gateway を使った方法
www.cdatablog.jp

CData Connet (データハブサービス) を使った方法
www.cdatablog.jp

どちらもトライアル利用が可能です。ぜひお試しくださいください。

CData Software Japan - ODBC Drivers

  • CData Connect

CData Connect | ユニバーサルなデータ接続プラットフォーム