數(shù)據(jù)遷移方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種數(shù)據(jù)遷移方法和裝置。
【背景技術(shù)】
[0002] 如圖1所示,為了將一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)用戶(hù)數(shù)據(jù)遷移到另一個(gè)數(shù)據(jù)庫(kù)中,通常 情況下需要先將用戶(hù)A、用戶(hù)B和用戶(hù)C等用戶(hù)的用戶(hù)數(shù)據(jù)由源數(shù)據(jù)庫(kù)導(dǎo)出(即,圖1中所示 的"先從源庫(kù)Exp"),然后在目標(biāo)數(shù)據(jù)庫(kù)建立相對(duì)應(yīng)的用戶(hù)并授權(quán),再將先前導(dǎo)出的用戶(hù)數(shù) 據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù)中(即,圖1所示的"再在目標(biāo)庫(kù)imp")。然而,上述導(dǎo)出操作需要先獲 取用戶(hù)A、用戶(hù)B和用戶(hù)C等用戶(hù)在源數(shù)據(jù)庫(kù)中的用戶(hù)名和密碼。
[0003] 假設(shè)源數(shù)據(jù)庫(kù)的地址為:192. 168. 0. 1,目標(biāo)數(shù)據(jù)庫(kù)的地址為:192. 168. 0. 2,如圖 1所示,現(xiàn)有技術(shù)中通常采用以下兩種方案來(lái)從源數(shù)據(jù)庫(kù)向目標(biāo)數(shù)據(jù)庫(kù)導(dǎo)入用戶(hù)數(shù)據(jù):
[0004] 方案一:采用imp技術(shù)(〇raCle9i及以下版本)從源數(shù)據(jù)庫(kù)向目標(biāo)數(shù)據(jù)庫(kù)導(dǎo)入用 戶(hù)數(shù)據(jù)。在執(zhí)行本方案時(shí),需要先從源數(shù)據(jù)庫(kù)導(dǎo)出用戶(hù)數(shù)據(jù),并在目標(biāo)數(shù)據(jù)庫(kù)建立對(duì)應(yīng)的用 戶(hù),再將上述導(dǎo)出的用戶(hù)數(shù)據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù)中。該方案的具體執(zhí)行過(guò)程可以包括如下 步驟:
[0005] 步驟1 :從源數(shù)據(jù)庫(kù)導(dǎo)出用戶(hù)數(shù)據(jù),并使用緩存空間來(lái)存儲(chǔ)導(dǎo)出的用戶(hù)數(shù)據(jù),該步 驟所對(duì)應(yīng)的指令可以如下所示:
[0006] Exp userA/userAil92. 168. 0.1 file=d:\userA. dmp
[0007] Exp userB/userBil92. 168. 0.1 file=d:\userB. dmp......
[0008] 步驟2 :從緩存空間中將上述導(dǎo)出的用戶(hù)數(shù)據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù)中,其中,執(zhí)行該 操作時(shí)或者之前需要在目標(biāo)數(shù)據(jù)庫(kù)建立對(duì)應(yīng)的用戶(hù)。執(zhí)行上述建立用戶(hù)和導(dǎo)入用戶(hù)數(shù)據(jù)的 指令可以如下所示:
[0009] Create user userA identified by userA
[0010] Grant dba to userA
[0011] Create user userB identified by userB
[0012] Grant dba to userB......
[0013] Imp userA/userAil92. 168. 0. 2file=d:\userA. dmp full=y
[0014] Imp userB/userBil92. 168. 0. 2file=d:\userB. dmp full=y......
[0015] 上述采用imp技術(shù)的方案相對(duì)簡(jiǎn)單,對(duì)于只遷移一個(gè)或者兩個(gè)特定用戶(hù)的數(shù)據(jù)時(shí) 比較方便快捷,然而對(duì)于遷移多用戶(hù)的數(shù)據(jù)時(shí)操作起來(lái)則較麻煩,這是因?yàn)樵趶脑磾?shù)據(jù)庫(kù) 導(dǎo)出用戶(hù)數(shù)據(jù)時(shí)必須要知道各個(gè)用戶(hù)的用戶(hù)名及密碼。也就是說(shuō),為了獲取每個(gè)用戶(hù)的用 戶(hù)數(shù)據(jù),則每次都需要先獲知該用戶(hù)的用戶(hù)名及密碼,并使用該用戶(hù)名及密碼來(lái)訪問(wèn)該用 戶(hù)的用戶(hù)數(shù)據(jù),這樣大大降低了數(shù)據(jù)遷移的效率。
[0016] 方案二:采用impdp技術(shù)(oraclelOG及以上版本推薦)從源數(shù)據(jù)庫(kù)向目標(biāo)數(shù)據(jù)庫(kù) 導(dǎo)入用戶(hù)數(shù)據(jù)。在執(zhí)行本方案時(shí),需要先從源數(shù)據(jù)庫(kù)導(dǎo)出用戶(hù)數(shù)據(jù),并在目標(biāo)數(shù)據(jù)庫(kù)建立對(duì) 應(yīng)的用戶(hù)和虛擬目錄,其中,建立虛擬目錄的指令可以如下所示:
[0017]CreatedirectoryDATA-PUMP-DIRas'/data/oradata'
[0018] 然后將上述導(dǎo)出的用戶(hù)數(shù)據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù)中。該方案的具體執(zhí)行過(guò)程可以包 括如下步驟:
[0019] 步驟1 :從源數(shù)據(jù)庫(kù)導(dǎo)出用戶(hù)數(shù)據(jù),該步驟所對(duì)應(yīng)的指令可以如下所示:
[0020] ExpdpuserA/userA@192. 168.0.Ifile=d:\userA.dmpdirectory=data_pump_dir schemas=userA
[0021] ExpdpuserB/userB@192.168.0.Ifile=d:\userB.dmpdirectory=data_pump_dir schemas=userB......
[0022] 步驟2 :將上述導(dǎo)出的用戶(hù)數(shù)據(jù)導(dǎo)入到目標(biāo)數(shù)據(jù)庫(kù)中,其中,執(zhí)行該操作時(shí)或者之 前需要在目標(biāo)數(shù)據(jù)庫(kù)建立對(duì)應(yīng)的用戶(hù)。執(zhí)行上述建立用戶(hù)和導(dǎo)入用戶(hù)數(shù)據(jù)的指令可以如下 所示:
[0023] CreateuseruserAidentifiedbyuserA
[0024] GrantdbatouserA
[0025] CreateuseruserBidentifiedbyuserB
[0026] GrantdbatouserB......
[0027] ImpdpuserA/userA@192. 168. 0. 2file=d:\userA.dmpdirectory=data_pump_dir schemas=userA
[0028] ImpdpuserB/userB@192.168. 0. 2file=d:\userB.dmpdirectory=data_pump_dir schemas=userB......
[0029] 上述采用impdp技術(shù)的方案相對(duì)于采用imp技術(shù)的方案而言,在導(dǎo)入導(dǎo)出數(shù)據(jù)時(shí) 速度更快,從而保證數(shù)據(jù)遷移的整體速度要優(yōu)于imp技術(shù)。然而,impdp技術(shù)的實(shí)現(xiàn)邏輯和 imp技術(shù)類(lèi)似,對(duì)于遷移多用戶(hù)的數(shù)據(jù)時(shí)操作起來(lái)比較麻煩,這是因?yàn)樵趶脑磾?shù)據(jù)庫(kù)導(dǎo)出用 戶(hù)數(shù)據(jù)時(shí)必須要知道各個(gè)用戶(hù)的用戶(hù)名及密碼。也就是說(shuō),為了獲取每個(gè)用戶(hù)的用戶(hù)數(shù)據(jù), 則每次都需要先獲知該用戶(hù)的用戶(hù)名及密碼,并使用該用戶(hù)名及密碼來(lái)訪問(wèn)該用戶(hù)的用戶(hù) 數(shù)據(jù),這樣大大降低了數(shù)據(jù)遷移的效率。
[0030] 綜上所述,無(wú)論使用imp還是impdp技術(shù),都需要知道源數(shù)據(jù)庫(kù)的用戶(hù)名和密碼, 如果涉及到要導(dǎo)入多個(gè)用戶(hù),就必須要知道源數(shù)據(jù)庫(kù)多個(gè)用戶(hù)的用戶(hù)名及密碼,并按照用 戶(hù)導(dǎo)出多個(gè)數(shù)據(jù)文件,在目標(biāo)數(shù)據(jù)庫(kù)建立多個(gè)與源數(shù)據(jù)庫(kù)中的用戶(hù)對(duì)應(yīng)的用戶(hù),然后按照 用戶(hù)分別執(zhí)行多次導(dǎo)入命令,如此操作將會(huì)非常繁復(fù),降低了數(shù)據(jù)遷移的效率。
[0031] 針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0032] 本發(fā)明實(shí)施例提供了一種數(shù)據(jù)遷移方法和裝置,以至少解決現(xiàn)有技術(shù)中多用戶(hù)數(shù) 據(jù)遷移時(shí)效率較低技術(shù)問(wèn)題。
[0033] 根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種數(shù)據(jù)遷移方法,包括:根據(jù)接收到的登 錄指令登錄第一數(shù)據(jù)庫(kù)中的管理帳戶(hù),其中,管理帳戶(hù)具有獲取第一數(shù)據(jù)庫(kù)中的多個(gè)用戶(hù) 的數(shù)據(jù)的權(quán)限;在管理帳戶(hù)下獲取多個(gè)用戶(hù)中的每個(gè)用戶(hù)的數(shù)據(jù)所占用的空間大??;將每 個(gè)用戶(hù)的數(shù)據(jù)從第一數(shù)據(jù)庫(kù)遷移到第二數(shù)據(jù)庫(kù)中與每個(gè)用戶(hù)對(duì)應(yīng)的大小為空間大小的表 空間中。
[0034] 可選地,將每個(gè)用戶(hù)的數(shù)據(jù)從第一數(shù)據(jù)庫(kù)遷移到第二數(shù)據(jù)庫(kù)中與每個(gè)用戶(hù)對(duì)應(yīng)的 大小為空間大小的表空間中包括:在第二數(shù)據(jù)庫(kù)中分別建立與每個(gè)用戶(hù)對(duì)應(yīng)的、大小為每 個(gè)用戶(hù)的數(shù)據(jù)所占用的空間大小的表空間;在第一數(shù)據(jù)庫(kù)與第二數(shù)據(jù)庫(kù)之間建立鏈接;通 過(guò)鏈接直接將每個(gè)用戶(hù)的數(shù)據(jù)從第一數(shù)據(jù)庫(kù)遷移到第二數(shù)據(jù)庫(kù)中與每個(gè)用戶(hù)對(duì)應(yīng)的表空 間中。
[0035] 可選地,通過(guò)鏈接直接將每個(gè)用戶(hù)的數(shù)據(jù)從第一數(shù)據(jù)庫(kù)遷移到第二數(shù)據(jù)庫(kù)中與每 個(gè)用戶(hù)對(duì)應(yīng)的表空間中包括:接收數(shù)據(jù)遷移指令,其中,數(shù)據(jù)遷移指令包括每個(gè)用戶(hù)的名稱(chēng) 和遷移目錄;響應(yīng)數(shù)據(jù)遷移指令直接將每個(gè)用戶(hù)的數(shù)據(jù)從第一數(shù)據(jù)庫(kù)遷移到第二數(shù)據(jù)庫(kù)中 的遷移目錄下的表空間中。
[0036] 可選地,響應(yīng)數(shù)據(jù)遷移指令直接將每個(gè)用戶(hù)的數(shù)據(jù)