Как получить доступ к данным одной БД из другой, используя Elasti c Job? - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь получить доступ к данным из одной БД в другую БД. Для этого я использую Elasti c Job.Using Elasti c Работа Я хочу создать таблицу из одной БД в другую. Но не могу получить доступ к данным или передать данные. Я пробовал использовать внешний источник данных и внешнюю таблицу.

Я использовал следующий код: Внешний источник данных

CREATE EXTERNAL DATA SOURCE RemoteReferenceData
WITH
(
    TYPE=RDBMS,
    LOCATION='myserver',
    DATABASE_NAME='dbname',
    CREDENTIAL= JobRun
);

CREATE EXTERNAL TABLE [tablename] (
[Id] int null,
[Name] nvarchar(max) null
) 
WITH (

     DATA_SOURCE = RemoteReferenceData,
     SCHEMA_NAME = N'dbo', 
OBJECT_NAME = N'mytablename'

);

Получение ошибки ниже:

> Error retrieving data from server.dbname.  The underlying error
> message received was: 'The server principal "JobUser" is not able to
> access the database "dbname" under the current security context.
> Cannot open database "dbname" requested by the login. The login
> failed. Login failed for user 'JobUser'.

1 Ответ

0 голосов
/ 17 марта 2020

В ваших утверждениях есть некоторые ошибки:

  1. значение LOCATION должно быть: LOCATION='[servername].database.windows.net'

  2. Убедитесь, что при создании CREDENTIAL: «Имя пользователя» и «пароль» должны быть именем пользователя и паролем, используемыми для входа в базу данных клиентов. Аутентификация с использованием Azure Active Directory с запросами elasti c в настоящее время не поддерживается .

Весь пример кода T- SQL должен выглядеть следующим образом:

CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
 WITH IDENTITY = 'Username',
 SECRET = 'Password';  

 CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
    (TYPE = RDBMS,
    LOCATION = '[servername].database.windows.net',
    DATABASE_NAME = 'Mydatabase',
    CREDENTIAL = ElasticDBQueryCred,
) ;

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


SELECT * FROM CustomerInformation

Я использую код для запроса таблицы в Mydatabase из DB1: enter image description here

Подробнее см. Здесь: Начало работы с запросами между базами данных (вертикальное разбиение) (предварительный просмотр)

Надеюсь, это поможет.

...