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

by 宮本航太 | 2021年03月22日

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

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

  • ODBC Driver

CData Software Japan - ODBC Drivers

  • CData Connect

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

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。