DbLink進行數據遷移

SQLServer安裝DBLink 遷移數據

DBLINK(數據庫鏈接),顧名思義就是數據庫的鏈接,就像電話線一樣,是一個通道,當我們要跨本地數據庫,訪問另外一個數據庫表中的數據時,本地數據庫中就必須要創建遠程數據庫的dblink,通過dblink本地數據庫可以像訪問本地數據庫一樣訪問遠程數據庫表中的數據。

選用DBLink緣由:

在數據庫遷移中對於大數據文件使用kettle時其中包含mysql批量添加時由於封閉符問題,或者是字符集編碼問題,導致數據庫代碼亂碼。採用navicat進行跨主機跨庫數據傳輸也是可以的但是會導致一些其他的問題比如不可以直觀看到傳輸的過程,即使錯誤了不能很好的定位到錯誤,採用dblink是可以直接把數據進行查詢出來,然後再插入到mysql數據庫中。dblink可以進行跨主機,跨庫進行數據傳輸。採用查出後在本地然後又插入到其他庫中的表中。總之在使用kettle和navicat踩了許多的坑所以嘗試選用dblink

navicat中:數據量較大會導致session失效,所以可以更改數據庫中的參數來設置。

kettle中的:主要的難題是數據庫編碼問題,字符編碼,以及mysql批量導致亂碼問題,無論使用批量還是表輸出都不能解決json類型的數據的存儲。

由於踩坑無數,在遷移過程中一部分採用kettle一部分採用dblink方式。

下面來看下如何使用dblink吧。

如何創建DBLink

CREATE [SHARED] [PUBLIC] database link link_name
  [CONNECT TO [user] [current_user] IDENTIFIED BY [password] 
  [AUTHENTICATED BY user IDENTIFIED BY password] 
  [USING 'connect_string']
   
   create database link linkfwq 
   connect to fzept identified by neu 
   using '(DESCRIPTION = 
   (ADDRESS_LIST = 
   (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521)) 
   ) 
   (CONNECT_DATA = 
   (SERVICE_NAME = fjept) 
   ) 
   )';

1)權限:創建數據庫鏈接的帳號必須有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系統權限,用來登錄到遠程數據庫的帳號必須有CREATE SESSION權限。這兩種權限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK權限在DBA中)。一個公用數據庫鏈接對於數據庫中的所有用戶都是可用的,而一個私有鏈接僅對創建它的用戶可用。由一個用戶給另外一個用戶授權私 有數據庫鏈接是不可能的,一個數據庫鏈接要麼是公用的,要麼是私有的。

2)link : 當source端的參數(parameter)GLOBAL_NAMES=TRUE時,link名必須與遠程數據庫的全局數據庫名global_name)相同;否則,可以任意命名。

3)current_user使用該選項是爲了創建global類型的dblink。在分佈式體系中存在多個數據庫的話。如果想要在每一個數據庫中都可以使用同樣的名字來訪問數據庫a,那在每個數據庫中都要創建一個到數據庫a的db_link,太麻煩了。所以有這個選項的話你只要創建一次。所有的數據庫都可以使用這個db_link來訪問了。要使用這個特性,必須有oracle nameserver或者ORACLE目錄服務器。並且數據庫a的參數global_names=true.具體我也沒有創建過,沒有這個環境。

4)connectstring:連接字符串,tnsnames.ora中定義遠程數據庫的連接串,也可以在創建dblink的時候直接指定。

5)username、password:遠程數據庫的用戶名,口令。如果不指定,則使用當前的用戶名和口令登錄到遠程數據庫,當創建connected user類型的dblink時,需要如果採用數據字典驗證,則需要兩邊數據庫的用戶名密碼一致

例如:

create public database link NC65DBLINK    
 connect to nc56 identified by nc56  
 using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.17.254)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
 // 查看是否創建成功
select * from dba_db_links;
select owner,object_name from dba_objects where object_type='DATABASE LINK';--查詢時間久

dblink連接Mysql

1.下載mysqlodbc數據源並安裝:

https://downloads.mysql.com/archives/c-odbc/ 建議不要選擇最新版,最新版視乎有點問題

在這裏插入圖片描述

2.配置信息

在控制面板中進行配置Mysql數據源直接搜索選擇64位的要:

在這裏插入圖片描述
配置數據源

在這裏插入圖片描述

配置系統DNS選擇MYSQL ODBC

在這裏插入圖片描述

然後進行填寫信息

在這裏插入圖片描述

3.在SQLserver創建DBLINK

在這裏插入圖片描述

填寫登錄密碼

在這裏插入圖片描述

DBLink鏈接SQLServer

1.建立DBlinkServer

直接輸入鏈接服務器的地址,和登錄密碼即和上述步驟一致。

DBLink 連接的語法

OPENQUERY用法
對給定的鏈接服務器執行指定的傳遞查詢。該服務器是 OLE DB 數據源。OPENQUERY 可以在查詢的 FROM 子句中引用,就好象它是一個表名。OPENQUERY 也可以作爲 INSERT、UPDATE 或 DELETE 語句的目標表進行引用。但這要取決於 OLE DB 訪問接口的功能。儘管查詢可能返回多個結果集,但是 OPENQUERY 只返回第一個。

Transact-SQL 語法約定

語法

OPENQUERY ( linked_server ,’query’ )
參數

linked_server
表示鏈接服務器名稱的標識符。

’ query ’
在鏈接服務器中執行的查詢字符串。該字符串的最大長度爲 8 KB。

備註

OPENQUERY 不接受其參數的變量。

在 SQL Server 2000 和更高版本中,OPENQUERY 不能用於對鏈接服務器執行擴展存儲過程。但是,通過使用四部分名稱,可以在鏈接服務器上執行擴展存儲過程。例如:

EXEC SeattleSales.master.dbo.xp_msver

權限

任何用戶都可以執行 OPENQUERY。用於連接到遠程服務器的權限是從爲鏈接服務器定義的設置中獲取的。

如何使用DBLink進行遷移呢

思路:

​ 1.從源數據庫中查出表數據,然後直接通過insert插入到新表中

從源到操作系統下的sql server
truncate agencies_agency;
insert into agencies_agency
(columnlist)
select columnist from [STAGE.RDS.LEARNING-GENIE.COM].LearningGenieDb.dbo.agencies_agency;
--如果數據量特別大,先抽取最近的數據,使用索引字段做區間過濾

\--
其他區間



從sql server到mysql
(插入語句)Insert openquery(MYSQL, 'select * from notes_note') (.......) select ....... from notes_note
--也可以分區間執行

主要語句是:

Insert into Table2(field1,field2,...) select value1,value2,... from Table1

Insert into Table2(a, c, d) select a,c,**5** from Table1

insert OPENQUERY([MYSQL-STAGE-STAGE],'select FileType,MediumImgPath,FileName,CreateAtUtc,Width,Height from 。庫名.表名') (FileType,MediumImgPath,FileName,CreateAtUtc,Width,Height)
 SELECT FileType,MediumImgPath,FileName,CreateAtUtc,Width,Height from [dblink名稱].表名;
GO
insert OPENQUERY([MYSQL-STAGE-STAGE],'select table_name,endtime from LearningGenieDb.etl_migrate_log') values('medias_media',GETUTCDATE());
GO

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章