自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server數(shù)據(jù)庫遷移偏方

數(shù)據(jù)庫 SQL Server 數(shù)據(jù)庫運維
之前在博文SQL Server 數(shù)據(jù)庫最小宕機遷移方案中提到了使用了完全備份+差異備份的功能完成了數(shù)據(jù)庫的轉(zhuǎn)移,但是這個方法在遇到了700多G的數(shù)據(jù)時顯然不適用,所以這篇中我是如何遷移700G的數(shù)據(jù)庫到新的服務(wù)器的。

一、目的

之前在博文SQL Server數(shù)據(jù)庫最小宕機遷移方案中提到了使用了完全備份+差異備份的功能完成了數(shù)據(jù)庫的轉(zhuǎn)移,但是這個方法在遇到了700多G的數(shù)據(jù)時顯然不適用,所以這篇中我是如何遷移700G的數(shù)據(jù)庫到新的服務(wù)器的。

二、分析與設(shè)計思路

(一) 環(huán)境描述

我們的數(shù)據(jù)庫使用了SQL Server 2005的,部署在Windows Server 2003 x86位操作系統(tǒng)上,有一個表占了這個數(shù)據(jù)庫大部分的空間。

面對上面的情況,我們的數(shù)據(jù)庫壓力比較大了,所以我們打算在同一個集群中找另外一臺機器,轉(zhuǎn)移這個數(shù)據(jù)庫的數(shù)據(jù)過去,通過設(shè)置新服務(wù)器的一些參數(shù)來達到優(yōu)化這個數(shù)據(jù)庫的目的。

(二) 數(shù)據(jù)分析

在拿到一個數(shù)據(jù)庫的時候,我們應(yīng)該查看這個數(shù)據(jù)庫相關(guān)的信息,在了解了數(shù)據(jù)庫的情況和參數(shù)之后再做出初步的評估,比如我們需要知道這個700G的數(shù)據(jù)庫中那些表占用了多少空間,索引占了多少空間(有一個SQL可以直接查看到這些信息),是否做了表分區(qū)。

了解參數(shù)的時候可以看看服務(wù)器硬件信息,比如內(nèi)存、硬盤、是否做了RAID策略、什么操作系統(tǒng)、數(shù)據(jù)庫的版本、內(nèi)存的壓力、CPU的壓力等等信息。了解這些信息是我們決定是否遷移到新的服務(wù)器的重要因素。

如果決定了進行數(shù)據(jù)遷移,那么為了不影響我們的生產(chǎn)的數(shù)據(jù)庫,讓生產(chǎn)數(shù)據(jù)庫還能進數(shù)據(jù),我們一次要搬多少條記錄才是合適的,這個我們也是需要計算的。(搬遷的Job盡量讓時間間隔大點,如果前一個Job還沒有執(zhí)行完的話,后一個Job即使到了時間也是不會執(zhí)行的。)

(三) 設(shè)計思路

  1. 創(chuàng)建一個表。這個表用來保存我們一次需要轉(zhuǎn)移的多少數(shù)據(jù)的ID值;(這個ID是我們要遷移表的主鍵,自增字段)。那我們需要一次性遷移多少數(shù)據(jù)呢?這個我們可以通過計算比如1000條記錄有多少M,一次傳輸對局域網(wǎng)的壓力大嘛?最好讓ID是一個整千或者整萬的整數(shù),這樣方便記錄和查看。
  2. 創(chuàng)建一個服務(wù)器對象-鏈接服務(wù)器。這樣就可以讀取到其它服務(wù)器上的數(shù)據(jù)庫了,可以進行數(shù)據(jù)搬遷了(注意這里需要設(shè)置鏈接服務(wù)器的帳號和密碼)
  3. 創(chuàng)建一個存儲過程。用于讀取、控制轉(zhuǎn)移數(shù)據(jù),這存儲過程需要比較智能一點,它需要解決下面缺陷中提到的幾個問題。
  4. 創(chuàng)建一個Job。這個Job就調(diào)用這個存儲過程,不過需要嘗試多幾次調(diào)用的頻率問題。

三、參考腳本

下面列出一些重點的sql,供參考。

--1.1,創(chuàng)建表

  1. CREATE TABLE [dbo].[Temp_MoveManage](  
  2.  
  3.     [Id] [intNOT NULL,  
  4.  
  5.     [IsDone] [bitNOT NULL,  
  6.  
  7.     [UpdateTime] [datetime] NULL,  
  8.  
  9.  CONSTRAINT [PK_Temp_MoveManage] PRIMARY KEY CLUSTERED   
  10.  
  11. (  
  12.  
  13.     [Id] ASC 
  14.  
  15. )WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]  
  16.  
  17. ON [PRIMARY

--1.2插入數(shù)據(jù)

  1. declare @i int   
  2.  
  3. set @i=1   
  4.  
  5. while @i < 50000000  
  6.  
  7. begin   
  8.  
  9.     insert into dbo.Temp_MoveManage values(@i,0)  
  10.  
  11.     set @i = @i + 50000  
  12.  
  13. end 

--1.3測試

  1. select * from Temp_MoveManage 

--2,鏈接服務(wù)器(省略)

--3,存儲過程

  1. SET ANSI_NULLS ON 
  2.  
  3. GO  
  4.  
  5. SET QUOTED_IDENTIFIER ON 
  6.  
  7. GO  
  8.  
  9. -- =============================================  
  10.  
  11. -- Author:    <Viajar>  
  12.  
  13. -- Create date: <2011.04.14>  
  14.  
  15. -- Description:   <轉(zhuǎn)移數(shù)據(jù)>  
  16.  
  17. -- =============================================  
  18.  
  19. ALTER PROCEDURE [dbo].[sp_GetMoveData]  
  20.  
  21. AS 
  22.  
  23. BEGIN 
  24.  
  25.     DECLARE @Id1 INT,@Id2 INT 
  26.  
  27.     DECLARE @MaxId INT--原表的最大值  
  28.  
  29.     SET @Id1 = 0  
  30.  
  31.     SET @Id2 = 0  
  32.  
  33.     SELECT TOP 1 @Id1 = Id FROM Temp_MoveManage WHERE IsDone = 0 ORDER BY Id  
  34.  
  35.     SELECT TOP 1 @Id2 = Id FROM Temp_MoveManage WHERE IsDone = 0 AND Id > @Id1 ORDER BY Id  
  36.  
  37.     SELECT @MaxId = MAX(Id) FROM [dbo].[ClassifyResult]  
  38.  
  39.     IF(@Id1 != 0 AND @Id2 != 0 AND @MaxId>=@Id2)  
  40.  
  41.     BEGIN 
  42.  
  43.        DECLARE @sql VARCHAR(MAX)  
  44.  
  45.        SET @sql = '  
  46.  
  47.        SET IDENTITY_INSERT [ClassifyResult_T] ON   
  48.  
  49.        INSERT INTO [dbo].[ClassifyResult_T](  
  50.  
  51.            [Id]   
  52.  
  53.           ,[ClassId]  
  54.  
  55.            ,[ArchiveId])  
  56.  
  57.        SELECT   
  58.  
  59.           [Id]   
  60.  
  61.           ,[ClassId]  
  62.  
  63.            ,[ArchiveId]  
  64.  
  65.        FROM [dbo].[ClassifyResult]  
  66.  
  67.        WHERE Id >= '+ CONVERT(VARCHAR(100),@Id1) + ' and Id < '+ CONVERT(VARCHAR(100),@Id2) + ' 
  68.  
  69.        ORDER BY Id  
  70.  
  71.        SET IDENTITY_INSERT [ClassifyResult_T] OFF '  
  72.  
  73.        EXEC (@sql)  
  74.  
  75.        UPDATE Temp_MoveManage SET IsDone = 1 WHERE Id = @Id1  
  76.  
  77.     END 
  78.  
  79. END 

--4,Job(省略)

四、缺陷

缺陷1:在CreateTable生成的表中,最后一條記錄無法執(zhí)行,因為最后一個Id是使用<,沒有用=,所以在轉(zhuǎn)移的表中最后一條記錄是沒有轉(zhuǎn)移過分區(qū)表的;

缺陷2:如果轉(zhuǎn)移表的記錄同時在不斷的增長,那么數(shù)據(jù)就無法把最新的數(shù)據(jù)轉(zhuǎn)移到分區(qū)表了;針對這個缺陷,本來的想法是為搬遷輔助表的Id分段加多一些記錄,這樣就可以執(zhí)行最新數(shù)據(jù);

缺陷3:對于上面的那個問題,也是有缺陷的,例如現(xiàn)在Id分段是100和200,當(dāng)新數(shù)據(jù)Id>100的某段時間,這兩個分段值的IsDone就會給更新為1,這樣就會造成缺失了很多數(shù)據(jù);針對這個缺陷,也是可以解決的,先去判斷當(dāng)新數(shù)據(jù)的Id>200的時候,才執(zhí)行導(dǎo)Id為100和200分段的腳本;(在存儲過程中判斷Max(Id)就可以了)

五、注意

  1. 對磁盤做RAID0(看具體情況而定)之后的創(chuàng)建分區(qū)時需要設(shè)置64K的分配單元大??;
  2. 64位操作系統(tǒng)和64位數(shù)據(jù)庫系統(tǒng);
  3. 搬遷完之后需要創(chuàng)建這表必要的索引,遷移的時候沒有創(chuàng)建索引是因為頻繁的插入會影響索引,這些索引需要進行存儲位置對齊;
  4. 因為把數(shù)據(jù)庫搬遷到新的服務(wù)器了,程序鏈接的IP地址就需要修改,如果很多程序需要修改鏈接地址,那我們又沒辦法解決呢?可以通過修改服務(wù)器的IP;
  5. 測試相關(guān)的應(yīng)用程序,測試數(shù)據(jù)庫的運行情況;

六、其它

這是一些朋友的建議,這里還沒有嘗試,因為環(huán)境的限制,比如數(shù)據(jù)庫是簡單模式了等情況。這里記錄下,期待適合環(huán)境的童鞋拿去用。

  1. 用Mirror遷移
  2. 考慮Log Shipping
  3. 先完整備份并在目標服務(wù)器還原,遷移前先進行事務(wù)日志備份并還原,最后將原庫所有數(shù)據(jù)庫賬號改為只讀,然后再進行一次事務(wù)日志備份并還原,這樣宕機時間會進一步減少,而且如果相關(guān)應(yīng)用不需要寫庫,那么在宕機時間段里對應(yīng)用也不會有太大影響。

 原文鏈接:http://www.cnblogs.com/gaizai/archive/2011/04/28/2032031.html

【編輯推薦】

  1. SQL Server數(shù)據(jù)庫最小宕機遷移方案
  2. 數(shù)據(jù)訪問由SQL Server遷移向Oracle數(shù)據(jù)庫的問題整理
  3. SQL Server數(shù)據(jù)遷移至云端應(yīng)用技巧談
  4. SQL Server數(shù)據(jù)庫遷移方法
  5. 遷移SQL數(shù)據(jù)庫五招

 

責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2009-03-19 09:44:07

SQL Server數(shù)據(jù)庫遷移數(shù)據(jù)庫

2011-04-18 10:00:32

SQL Server數(shù)據(jù)庫遷移

2023-11-29 09:53:29

數(shù)據(jù)庫遷移SQL Server

2011-03-31 14:33:57

SQL Server最小宕機遷移

2011-04-06 17:30:41

SQL ServerSQL

2010-07-15 17:28:50

SQL Server

2021-05-17 06:57:34

SQLServer數(shù)據(jù)庫

2010-07-08 11:05:14

SQL Server數(shù)

2011-03-18 13:23:47

SQL ServerOracle

2011-03-24 09:45:34

SQL Server數(shù)恢復(fù)

2011-03-24 09:07:11

SQL Server數(shù)備份

2011-03-21 10:13:31

Sql Server數(shù)分區(qū)

2011-03-24 09:24:08

SQL Server數(shù)還原

2021-03-18 08:20:19

SQLServer數(shù)據(jù)庫SQL

2011-04-01 17:05:44

SQL Server數(shù)日志

2010-06-30 11:16:50

SQL Server

2010-06-28 10:06:09

SQL Server數(shù)

2011-09-21 14:00:34

SQL Server

2011-09-01 19:00:08

SQL ServerDBCC語句

2009-07-06 21:20:34

SQL Server數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號