Uma demanda que nos surgiu foi criar um vínculo entre dois servidores de banco de dados para que possam trocar informações; o SQL Server seria o banco de dados principal na sede da empresa (local) e o banco de dados MySQL é o seu banco de dados na internet para o e-commerce.
Passo a passo da criação do "Linked Server":
- Logar no banco de dados SQL Server com o usuário que também será mapeado num usuário no banco de dados MySQL;
- No banco de dados SQL Server, ir em "Objetos de Servidor" --> "Servidores Vínculados" --> "Provedores" --> "MSDASQL", com o botão direito do Mouse selecione propriedades e marque as seguintes:
- Criar uma fonte de dados ODBC para o banco de dados remoto MySQL (pode-se baixar o aplicativo em MySQL :: Download Connector/ODBC) , vá em "Painel de Controle" --> "Sistemas e Segurança" --> "Ferramentas Administrativas" --> "Fontes de Dados ODBC (64 bits)" -- "DNS de Sistemas" --> "Adicionar"
Realize o teste dessa conexão, para verificar se tudo está correto:
- Agora vamos criar um servidor vinculado (Linked Server) chamado "SER" utilizando essa conexão ODBC criada acima. a criação será através de um script (também pode ser realizado com a interface gráfica do MS Management Studio):
USE [master]
GO
/****** Object: LinkedServer [SER] Script Date: 03/01/2023 23:27:16 ******/
EXEC master.dbo.sp_addlinkedserver @server = N'SER', @srvproduct=N'lojayii', @provider=N'MSDASQL', @datasrc=N'loja365', @provstr=N'DRIVER={MySQL ODBC 8.0 Unicode Driver}; Hostname=loja365.mysql.dbaas.com.br; PORT=3306; DATABASE=loja365; LogonID=lojayii; PASSWORD=tytttrrrW#1968'
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SER',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'SER', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
Com o botão direito do mouse sobre a nova conexão "SER" teste-a, se tudo ok vamos em frente:
- com o botão direito do mouse sobre a nova conexão "SER" selecione propriedades e na nova tela selecione "Segurança"
Mapeie o usuário do banco de dados SQL Server no usuário no banco de dados MySQL remoto, tudo pronto agora é só testar !
Referências:
[1] - OPENQUERY (Transact-SQL) - SQL Server | Microsoft Learn