다음을 통해 공유


데이터베이스 간 쿼리 시작(수직 분할)(미리 보기)

적용 대상:Azure SQL Database

Azure SQL Database에 대해 탄력적 데이터베이스 쿼리(미리 보기)를 사용하면 단일 연결점을 사용하여 여러 데이터베이스에 걸쳐 있는 T-SQL 쿼리를 실행할 수 있습니다. 이 문서는 수직 분할된 데이터베이스에 적용됩니다. 이 문서에서는 Azure SQL Database를 구성하고 사용하여 여러 관련 데이터베이스에 걸쳐 있는 쿼리를 수행하는 방법을 알아봅니다.

탄력적 데이터베이스 쿼리 기능에 대한 자세한 내용은 azure SQL Database 탄력적 쿼리 개요(미리 보기)참조하세요.

필수 조건

외부 데이터 소스를 변경할 수 있는 권한이 필요합니다. 이 사용 권한은 ALTER DATABASE 권한에 포함됩니다. 기본 데이터 원본을 참조하기 위해 ALTER ANY EXTERNAL DATA SOURCE 권한이 필요합니다.

샘플 데이터베이스 만들기

먼저 동일하거나 다른 논리 서버에 CustomersOrders두 개의 데이터베이스를 만듭니다.

Orders 데이터베이스에서 다음 쿼리를 실행하여 OrderInformation 테이블을 만들고 샘플 데이터를 입력합니다.

CREATE TABLE [dbo].[OrderInformation](
    [OrderID] [int] NOT NULL,
    [CustomerID] [int] NOT NULL
    )
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (123, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (149, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (857, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (321, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (564, 8)

이제 Customers 데이터베이스에서 다음 쿼리를 실행하여 CustomerInformation 테이블을 만들고 샘플 데이터를 입력합니다.

CREATE TABLE [dbo].[CustomerInformation](
    [CustomerID] [int] NOT NULL,
    [CustomerName] [varchar](50) NULL,
    [Company] [varchar](50) NULL
    CONSTRAINT [CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
)
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (1, 'Jack', 'ABC')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (2, 'Steve', 'XYZ')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (3, 'Lylla', 'MNO')

데이터베이스 개체 만들기

데이터베이스 범위 마스터 키 및 자격 증명

  1. SQL Server Management Studio 또는 Visual Studio의 SQL Server Data Tools를 엽니다.

  2. Orders 데이터베이스에 연결하고 다음 T-SQL 명령을 실행합니다.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master_key_password>';
    CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
    WITH IDENTITY = '<username>',
    SECRET = '<password>';  
    
    • master_key_password는 연결 자격 증명을 암호화하는 데 사용하는 귀하가 선택한 강력한 암호입니다.
    • usernamepassword Customers 데이터베이스에 로그인하는 데 사용되는 사용자 이름 및 암호여야 합니다(아직 없는 경우 Customers 데이터베이스에 새 사용자 만들기).
    • 탄력적 쿼리와 함께 Microsoft Entra ID(이전의 Azure Active Directory)를 사용한 인증은 현재 지원되지 않습니다.

외부 데이터 원본

외부 데이터 원본을 만들려면 Orders 데이터베이스에서 다음 명령을 실행하여 Customers 데이터베이스에 연결합니다. LOCATIONCustomers 데이터베이스의 Azure SQL 논리 서버를 제공합니다.

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '<server_name>.database.windows.net',
    DATABASE_NAME = 'Customers',
    CREDENTIAL = ElasticDBQueryCred
);

외부 테이블

Orders 데이터베이스에 CustomerInformation 테이블의 정의와 일치하는 외부 테이블을 만듭니다.

CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
    [CustomerName] [varchar](50) NOT NULL,
    [Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)

원격 쿼리

sp_execute_remote 저장 프로시저를 사용하여 단일 원격 Azure SQL Database 또는 수평 분할 체계에서 분할된 데이터베이스로 사용되는 데이터베이스 집합에서 Transact-SQL 문을 실행합니다. 다음 원격 T-SQL 쿼리는 외부 OrderInformation 테이블의 데이터를 반환합니다.

EXEC sp_execute_remote
    N'MyElasticDBQueryDataSrc',
    N'SELECT COUNT(CustomerID) AS customer_count FROM CustomerInformation';

탄력적 데이터베이스 T-SQL쿼리 샘플 실행

외부 데이터 원본 및 외부 테이블을 정의한 후에는 이제 T-SQL을 사용하여 외부 테이블을 쿼리할 수 있습니다. Orders 데이터베이스에서 다음 쿼리를 실행합니다.

SELECT OrderInformation.CustomerID, OrderInformation.OrderId, CustomerInformation.CustomerName, CustomerInformation.Company
FROM OrderInformation
INNER JOIN CustomerInformation
ON CustomerInformation.CustomerID = OrderInformation.CustomerID;

비용

현재 탄력적 데이터베이스 쿼리 기능은 Azure SQL Database의 비용에 포함되어 있습니다.

가격 책정 정보는 SQL Database 가격 책정을 참조하세요.