この記事では、Oracle19cとSQLServer2019の間でリンクサーバーを作成および構成する手順を説明します。

リンクサーバーを作成するための前提条件
デモンストレーションのために、ワークステーションにSQLServer2019をインストールしました。それに伴い、Oracle 19cをインストールし、 EMPLOYEEという名前のインスタンスを作成しました。 。今後の記事では、Oracle19cのインストールと構成のステップバイステップのプロセスについても説明します。
リンクサーバーを構成するには、最初にOracleでデータベースを作成してから、OracleDBでユーザーを作成する必要があります。 CREATEUSERコマンドがそれを行います。 GRANTキーワードは、接続を保証します 、リソース 、および無制限のテーブルスペース ユーザーへの特権。 CREATE USERキーワードの詳細については、この記事を参照してください。
SQL Plusを開き、次のコマンドを使用してOracleで接続します。
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Feb 21 17:40:15 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Enter user-name: sys as sysdba

コマンドはパスワードの入力を求めます。空のままにして、 Enterを押します 。
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Enter user-name: sys as sysdba
Enter password:
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

これで、Oracleインスタンスに正常に接続されました。次のクエリを実行して、 nisargという名前のユーザーを作成します :
SQL> create user nisarg identified by "[email protected]";
User-created.

次のクエリは、 nisargに適切な権限を付与します ユーザー:
SQL> grant connect,resource, unlimited tablespace to nisarg;
Grant succeeded.

従業員データベースにテーブルを作成する
3つのテーブルを作成しています: tblemployee 、 tblDepartment 、および tblDesignation 。外部キーはtblemployeeにあります テーブル。外部キー列はemployee_dept_id およびemployee_designation_id 。 tblDepartmentを参照しています およびtblDesignation テーブル。テーブルを作成するためのスクリプトは以下のとおりです。
tblemployeeを作成します テーブル:
CREATE TABLE NISARG."tblEmployee" (
ID NUMBER(10, 0) GENERATED ALWAYS AS IDENTITY (
MAXVALUE 1000000000000000000000000000),
"Employee_name" NVARCHAR2(50),
"Employee_dept_id" INTEGER,
"Address" NVARCHAR2(1000),
"ContactNumber" NVARCHAR2(50),
"Employee_designation_id" INTEGER,
CONSTRAINT FK_TBLEMPLOYEE_EMPLOYEE_DEPT_ID FOREIGN KEY ("Employee_dept_id")
REFERENCES NISARG."tblDepartment" ("Dept_ID"),
CONSTRAINT FK_TBLEMPLOYEE_EMPLOYEE_DESIGN FOREIGN KEY ("Employee_designation_id")
REFERENCES NISARG."tblDesignation" ("Designation_ID")
)
TABLESPACE USERS;
tblDepartmentを作成します テーブル:
CREATE TABLE NISARG."tblDepartment" (
"Dept_ID" INTEGER GENERATED ALWAYS AS IDENTITY (
MAXVALUE 1000000000000000000000000000),
"Dept_name" NVARCHAR2(50)
)
TABLESPACE USERS;
tblDesignationを作成します テーブル:
CREATE TABLE NISARG."tblDesignation" (
"Designation_ID" NUMBER(10, 0) GENERATED ALWAYS AS IDENTITY (
MAXVALUE 1000000000000000000000000000),
"Designation_Name" NVARCHAR2(50)
)
TABLESPACE USERS;
ここでER図を見ることができます:

それでは、リンクサーバーを作成しましょう。
SSMSを使用してリンクサーバーを作成する
Oracle 19c、クライアント、またはサーバーをインストールする場合、 OraOLEDB.Oracleという名前のプロバイダー 作成されます。これらのプロバイダーは、SQLServerと他のデータソースまたはデータベース間の通信を保証します。
Oracleをインストールすると、OLEDBプロバイダーがプロバイダーの下に作成されていることがわかります。 SQL ServerManagementStudioのノード。

新しいリンクサーバーを作成する前に、 Aを有効にする必要があります 処理中 パラメータ。
OraOLEDB.Oracleを右クリックします。 プロパティをクリックします :

プロバイダーオプションについて 画面で、インプロセスを許可をクリックします 。 OKをクリックします 構成を保存するには:

リンクサーバーを作成するには、SSMSを開き、データベースエンジンに接続します。 サーバーオブジェクト>リンクサーバー>新しいリンクサーバーを展開します :

構成ウィンドウで、次の詳細を指定します。
- リンクサーバー 。リンクサーバーの名前を指定します。 この名前にはスペースやその他の文字を含めることはできません 。この場合、リンクサーバーの名前は ORACLESERVERです。 。
- サーバータイプ 。 SQLServerまたはその他のデータソースを選択できます。この例では、OracleとSQLServerの間にリンクサーバーを作成しています。したがって、その他のデータを選択してください ソース 。
- プロバイダー 。 プロバイダーから名前を選択します ドロップダウンメニュー。この例では、Oracle OLEDBのプロバイダーです。 。
- データソース 。 データソース名は、Oracleインスタンスのサービス名です 。私たちの場合、それは従業員です 。

サービスのリストは、サービスの名前付けで確認できます。 Oracle Net Configuration マネージャー>サービスの命名> サービス名を選択します。

次に、Oracleデータベースサーバーに接続するためのセキュリティ設定を構成します。新しいリンクサーバー ウィンドウで、セキュリティに移動します セクション。
リモートログインを使用して接続を確立します およびパスワード。そのためには、このセキュリティコンテキストを使用して作成するを選択します オプションを選択し、資格情報を指定します:

リモートストアドプロシージャを実行するには、リンクサーバーでRPC(リモートプロシージャコール)を有効にする必要があります。
サーバーオプションに移動します セクションを作成し、 RPCを設定します Trueとしての値 :

次に、[ OK ]をクリックします リンクサーバーを作成します。正常に完了すると、LinkedInサーバーで表示できます。 SSMSのノード:

T-SQLを使用してリンクサーバーを作成する
T-SQLスクリプトを実行して、リンクサーバーを作成できます。次に、リンクサーバーを追加するには、 sp_addlinkedserverを使用できます。 ストアドプロシージャ。リンクサーバーのログインを構成するには、 sp_addlinkedsrvloginを使用できます。 ストアドプロシージャ。構成パラメーターを設定するには、 sp_serveroptionを使用できます。 ストアドプロシージャ。
この場合、リンクサーバーを追加するには、次のコードを実行する必要があります。
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'ORACLESERVER',
@srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'employee'
次のコードを実行して、リンクサーバーのセキュリティを構成します。
USE [master]
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ORACLESERVER',
@useself=N'False',@locallogin=NULL,@rmtuser=N'nisarg',@rmtpassword='########'
次のコードは、構成パラメーターを設定するためのものです。
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'rpc out', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ORACLESERVER', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
それでは、データをクエリして構成をテストしましょう。
データをクエリして接続をテストします
接続をテストするには、SQL Server Management Studioを起動し、次のクエリを実行します。
select * from [oracleserver]..NISARG.tblEmployee
クエリ出力:

ご覧のとおり、クエリは正常に実行されました。リンクサーバーが正常に構成されたことを示します。
次に、SQL Serverでストアドプロシージャを作成して、Oracleデータベースのデータにアクセスし、OracleSQLクエリを実行します。
create procedure sp_view_employee
as
begin
select * from [oracleserver]..NISARG.tblEmployee
end
以下のコマンドを実行して、ストアドプロシージャを実行します。
Exec sp_view_employee
クエリ出力:

パラメータ化されたストアドプロシージャを実行してみましょう。コードは次のとおりです:
create procedure sp_view_employee_name
@employeeName varchar(50)
as
begin
select * from [oracleserver]..NISARG.tblEmployee where [email protected]
end
手順を実行します:
exec sp_view_employee 'Nisarg Upadhyay'
クエリ出力:

概要
このようにして、OracleとSQLServer2019でリンクサーバーを構成できます。プロセスを段階的に説明しました。この記事が作業に役立つことを願っています。
また読む
リンクサーバーの使用に関する落とし穴