{"id":654,"date":"2011-06-23T17:26:29","date_gmt":"2011-06-23T19:26:29","guid":{"rendered":"http:\/\/fabriciolima.net\/blog\/?p=654"},"modified":"2016-07-23T23:19:34","modified_gmt":"2016-07-24T02:19:34","slug":"criando-um-linked-server-do-sql-server-para-o-db2-as400","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2011\/06\/23\/criando-um-linked-server-do-sql-server-para-o-db2-as400\/","title":{"rendered":"Criando um Linked Server do SQL Server para o DB2 AS\/400"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>Na empresa que trabalho possuo um ambiente SQL Server e um ambiente com um Mainframe AS\/400 da IBM com o SGBD DB2 instalado. Com isso, constantemente precisamos acessar os dados do servidor AS\/400 de dentro do SQL Server e fazemos isso via Linked Server.<\/p>\n<p>Para utilizarmos um provider OLE DB no nosso linked server, deve ser instalado o IBM Client Acess no servidor. Ap\u00f3s essa instala\u00e7\u00e3o \u00e9 disponibilizado o provider &#8220;IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider&#8221;.<\/p>\n<p>Segue abaixo o script de cria\u00e7\u00e3o do LS:<\/p>\n<p>exec sp_addlinkedserver @server=N&#8217;NOME_LINKED_SERVER&#8217;,<br \/>\n@srvproduct=N&#8217;IBM DB2 UDB for iSeries IBMDA400 OLE DB Provider&#8217;,<br \/>\n@provider=N&#8217;IBMDA400&#8242;,<br \/>\n@datasrc=N&#8217;X.X.X.X&#8217;, &#8212; IP do servidor<br \/>\n@catalog=&#8217;CATALOG_SERVIDOR&#8217;,<br \/>\n@provstr=&#8217;Default Collection=NOME_LIBRARY&#8217;<\/p>\n<p>exec\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sp_addlinkedsrvlogin @rmtsrvname=N&#8217;NOME_LINKED_SERVER&#8217;,<br \/>\n@useself=&#8217;false&#8217;,<br \/>\n@rmtuser=N&#8217;USER&#8217;,<br \/>\n@rmtpassword=&#8217;SENHA&#8217;<\/p>\n<p>Em seguida devem ser habilitadas algumas op\u00e7\u00f5es do PROVIDER e do Linked Server para permitir a execu\u00e7\u00e3o de Updates, querys com like dentre outros opera\u00e7\u00f5es.<\/p>\n<p>USE [master]\nGO<br \/>\nEXEC master.dbo.sp_MSset_oledb_prop N&#8217;IBMDA400&#8242;, N&#8217;AllowInProcess&#8217;, 1<br \/>\nGO<br \/>\nEXEC master.dbo.sp_MSset_oledb_prop N&#8217;IBMDA400&#8242;, N&#8217;NonTransactedUpdates&#8217;, 1<br \/>\nGO<br \/>\nEXEC master.dbo.sp_MSset_oledb_prop N&#8217;IBMDA400&#8242;, N&#8217;SqlServerLIKE&#8217;, 1<br \/>\nGO<br \/>\nEXEC master.dbo.sp_serveroption @server=N&#8217;NOME_LINKED_SERVER&#8217;, @optname=N&#8217;collation compatible&#8217;, @optvalue=N&#8217;true&#8217;<br \/>\nGO<br \/>\nEXEC master.dbo.sp_serveroption @server=N&#8217;NOME_LINKED_SERVER&#8217;, @optname=N&#8217;rpc&#8217;, @optvalue=N&#8217;true&#8217;<br \/>\nGO<br \/>\nEXEC master.dbo.sp_serveroption @server=N&#8217;NOME_LINKED_SERVER&#8217;, @optname=N&#8217;rpc out&#8217;, @optvalue=N&#8217;true&#8217;<br \/>\nGO<\/p>\n<p>Com o linked server criado, as seguintes opera\u00e7\u00f5es podem ser realizadas do SQL Server:<\/p>\n<p>Select * From OpenQuery(NOME_LINKED_SERVER,&#8217;Select* FROM LIBRARY.TABLE<br \/>\nFETCH FIRST 1 ROWS ONLY<br \/>\nFOR READ ONLY &#8216; ) As Remote<\/p>\n<p>exec (&#8216;Select * FROM LIBRARY.TABLE<br \/>\nFETCH FIRST 1 ROWS ONLY<br \/>\nFOR READ ONLY &#8216;) AT NOME_LINKED_SERVER<\/p>\n<p>SELECT * FROM NOME_LINKED_SERVER.CATALOG.LIBRARY.TABLE<\/p>\n<p>Para chamar uma procedure do DB2 , deve ser utilizado a seguinte sintaxe:<br \/>\nexec (&#8216;call LIBRARY.NOME_PROCEDURE(?,?)&#8217;,1,&#8217;Fabricio Lima&#8217;) AT NOME_LINKED_SERVER<\/p>\n<p>Essa procedure recebe 1 parametro do tipo INT e um par\u00e2metro VARCHAR.<\/p>\n<p>Podemos tamb\u00e9m inserir e alterar valores via linked server.<br \/>\nINSERT INTO NOME_LINKED_SERVER.CATALOG.LIBRARY.TABLE(Column)<br \/>\nSELECT VALUE<\/p>\n<p>UPDATE NOME_LINKED_SERVER.CATALOG.LIBRARY.TABLE<br \/>\nSET Column = &#8216;TESTE&#8217;<br \/>\nWHERE Column &lt;&gt; &#8216;TESTE<\/p>\n<p>Infelizmente, no DB2 para o AS\/400 n\u00e3o \u00e9 poss\u00edvel realizar um simples UPDATE com JOIN como o que temos abaixo, deve ser utilizado EXISTS para isso.<\/p>\n<p>UPDATE A<br \/>\nSET A.Column = B.Column<br \/>\nFROM TABLE A<br \/>\nJOIN TABLE B ON A.Cod = B.Cod<\/p>\n<p>Entretanto, via Linked Server do SQL Server esse update funciona perfeitamente.<\/p>\n<p>UPDATE A<br \/>\nSET A.Column = B.Column<br \/>\nFROM NOME_LINKED_SERVER.CATALOG.LIBRARY.TABLE A<br \/>\nJOIN NOME_LINKED_SERVER.CATALOG.LIBRARY.TABLE B ON A.Cod = B.Cod<\/p>\n<p>Encontrar esse tipo de material \u00e9 bem dif\u00edcil, se eu encontrasse um post como esse quando comecei a trabalhar com o AS\/400 atrav\u00e9s do SQL Server eu teria adiantado bastante meu trabalho. Ent\u00e3o, espero que agora outras pessoas possam encontrar esse post mais facilmente.<\/p>\n<p><b>Gostou desse Post?<\/b><\/p>\n<p>Cadastre seu e-mail para receber novos Posts e curta minha <a href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\">P\u00e1gina no Facebook<\/a> para receber Dicas de Leituras e Eventos sobre SQL Server.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>MCITP \u2013 Database Administrator<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala Pessoal, Na empresa que trabalho possuo um ambiente SQL Server e um ambiente com um Mainframe AS\/400 da IBM com o SGBD DB2 instalado. Com isso, constantemente precisamos acessar os dados do servidor AS\/400 de dentro do SQL Server e fazemos isso via Linked Server. Para utilizarmos um provider OLE DB no nosso linked [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3,280],"tags":[285,284,23,308,306,286,305,283,307,304,303,49,33],"class_list":["post-654","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-virtual-pass-br","tag-as400","tag-db2","tag-dba","tag-exec-at","tag-ibm","tag-ibm-as400","tag-ibm-db2-udb-for-iseries-ibmda400-ole-db-provider","tag-linked-server","tag-openquery","tag-sp_addlinkedserver","tag-sp_addlinkedsrvlogin","tag-sql","tag-sql-server"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":3603,"url":"https:\/\/fabriciolima.net\/blog\/2015\/10\/27\/casos-do-dia-a-dia-problema-para-acessar-o-oracle-via-linked-server-pelo-sql-server\/","url_meta":{"origin":654,"position":0},"title":"Casos do Dia a Dia: Problema para acessar o Oracle via Linked Server pelo SQL Server","author":"Fabr\u00edcio Lima","date":"27 de outubro de 2015","format":false,"excerpt":"Ol\u00e1 Pessoal, Passando aqui para deixar uma dica r\u00e1pida de um caso que aconteceu comigo. Um cliente entrou em contato dizendo que estava com um problema para utilizar um Linked Server do SQL Server para o Oracle. O Linked Server funcionava para algumas tabelas e outras n\u00e3o. Segue abaixo o\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2015\/10\/PostLinkedServerOracle.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1147,"url":"https:\/\/fabriciolima.net\/blog\/2012\/01\/31\/1-ano-de-fabriciolima-net\/","url_meta":{"origin":654,"position":1},"title":"1 Ano de FabricioLima.net","author":"Fabr\u00edcio Lima","date":"31 de janeiro de 2012","format":false,"excerpt":"Fala Pessoal, No dia 26\/01\/2012 o blog fabriciolima.net completou um ano de vida. Tive momentos de des\u00e2nimo, mas pouco tempo depois j\u00e1 estava empolgado para escrever novamente. Eu tenho uns 3 contadores de visitas ao Blog e cada um tem um valor diferente. Entretanto, como Google \u00e9 Google, vou utilizar\u2026","rel":"","context":"Em &quot;Carreira&quot;","block_context":{"text":"Carreira","link":"https:\/\/fabriciolima.net\/blog\/category\/carreira\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/InfoGerais.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2541,"url":"https:\/\/fabriciolima.net\/blog\/2013\/12\/06\/lista-com-um-ranking-de-popularidade-de-sgbds\/","url_meta":{"origin":654,"position":2},"title":"Lista com um ranking de popularidade de SGBDs","author":"Fabr\u00edcio Lima","date":"6 de dezembro de 2013","format":false,"excerpt":"Fala Pessoal, Algu\u00e9m deu um retweet de um site que mensalmente atualiza um Ranking com a popularidade dos SGBDs existentes no mercado. Segue o ranking de Dezembro de 2013: O SQL Server teve uma leve queda em compara\u00e7\u00e3o com o m\u00eas anterior, mas como o Oracle caiu mais pontos, a\u2026","rel":"","context":"Em &quot;Carreira&quot;","block_context":{"text":"Carreira","link":"https:\/\/fabriciolima.net\/blog\/category\/carreira\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2013\/12\/RankingDatabases.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2013\/12\/RankingDatabases.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2013\/12\/RankingDatabases.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":9778,"url":"https:\/\/fabriciolima.net\/blog\/2018\/11\/28\/managed-instance-10-consigo-criar-linked-server\/","url_meta":{"origin":654,"position":3},"title":"Managed Instance (#10) \u2013 Consigo criar Linked Server?","author":"Fabr\u00edcio Lima","date":"28 de novembro de 2018","format":false,"excerpt":"Fala Pessoal, Esse \u00e9 mais um post da s\u00e9rie sobre o Azure SQL Database Managed Instance. Caso ainda n\u00e3o tenha visto, seguem os posts anteriores: Azure SQL DB Managed Instance \u2013 Introdu\u00e7\u00e3o Managed Instance \u2013 Criando minha primeira inst\u00e2ncia Managed Instance \u2013 Como se conectar direto do SSMS utilizando uma\u2026","rel":"","context":"Em &quot;Azure SQL Database&quot;","block_context":{"text":"Azure SQL Database","link":"https:\/\/fabriciolima.net\/blog\/category\/azure-sql-database\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_LinkedServer_1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_LinkedServer_1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_LinkedServer_1.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1088,"url":"https:\/\/fabriciolima.net\/blog\/2011\/12\/31\/retrospectiva-2011-e-planejamento-de-2012\/","url_meta":{"origin":654,"position":4},"title":"Retrospectiva 2011 e Planejamento de 2012","author":"Fabr\u00edcio Lima","date":"31 de dezembro de 2011","format":false,"excerpt":"Ol\u00e1 Pessoal, Assim como no ano passado Retrospectiva 2010 , farei uma retrospectiva desse ano de 2011 e tamb\u00e9m alguns planos para 2012. Segue algumas coisas que me aconteceram (espero lembrar da maioria delas): 1 - No dia 27\/01\/2011 criei o meu pr\u00f3prio dom\u00ednio: http:\/\/fabriciolima.net e at\u00e9 hoje (11:31 am)\u2026","rel":"","context":"Em &quot;Carreira&quot;","block_context":{"text":"Carreira","link":"https:\/\/fabriciolima.net\/blog\/category\/carreira\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":149,"url":"https:\/\/fabriciolima.net\/blog\/2010\/11\/14\/sql-server-11-codinome-denali\/","url_meta":{"origin":654,"position":5},"title":"SQL Server 11 &#8211; Codinome Denali","author":"Fabr\u00edcio Lima","date":"14 de novembro de 2010","format":false,"excerpt":"Fala Pessoal, Como j\u00e1 foi divulgado em v\u00e1rios blogs, essa semana foi lan\u00e7ado publicamente o CTP1 do SQL Server 11 com o Codinome \u201cDenali\u201d. \u00c9 importante lembrar que SQL Server 11 n\u00e3o quer dizer SQL Server 2011 segundo o pr\u00f3prio Paul Randal disse via twitter. SQL Server 11 significa que\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=654"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/654\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=654"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=654"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}