国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

玩轉(zhuǎn)SQL Server復(fù)制回路の變更數(shù)據(jù)類型、未分區(qū)表轉(zhuǎn)為分區(qū)表

2024-08-31 00:54:22
字體:
供稿:網(wǎng)友
玩轉(zhuǎn)SQL Server復(fù)制回路の變更數(shù)據(jù)類型、未分區(qū)表轉(zhuǎn)為分區(qū)表玩轉(zhuǎn)SQL Server復(fù)制回路の變更數(shù)據(jù)類型、未分區(qū)表轉(zhuǎn)為分區(qū)表

復(fù)制的應(yīng)用:

初級應(yīng)用:讀寫分離、數(shù)據(jù)庫備份

高級應(yīng)用:搬遷大型數(shù)據(jù)庫(跨機房)、變更數(shù)據(jù)類型、未分區(qū)表轉(zhuǎn)為分區(qū)表

京東的復(fù)制專家 菠蘿 曾經(jīng)寫過文章、在數(shù)據(jù)庫大會上也做過演講,但是我相信真正按照菠蘿兄的文章自己去做一次實驗的人應(yīng)該不多

京東的復(fù)制專家 菠蘿 的文章地址:Replication的犄角旮旯(一)--變更訂閱端表名的應(yīng)用場景

為什麼要玩轉(zhuǎn)復(fù)制,大家想象一下:變更數(shù)據(jù)類型、未分區(qū)表轉(zhuǎn)為分區(qū)表 這些業(yè)務(wù)場景經(jīng)常都會發(fā)生,特別在數(shù)據(jù)量特別大的公司

變更數(shù)據(jù)類型:沒有其他特別好的辦法,數(shù)據(jù)量大,鎖表時間會比較長

未分區(qū)表轉(zhuǎn)為分區(qū)表:有時候一張表的數(shù)據(jù)量已經(jīng)很多了,比如體積已經(jīng)達到100G,那么這時候需要做表分區(qū),方法是重建聚集索引或者導(dǎo)數(shù)據(jù)

上面的方法不多不少都有一些缺陷,對于數(shù)據(jù)量特別大的情況下,如果超出業(yè)務(wù)的預(yù)期停機時間……菊花殘,滿地傷,被領(lǐng)導(dǎo)認為辦事不力

常見場景:

1、變更其中的自增列主鍵,int-》bigint ,將表改為表分區(qū)

2、100G+的大表

3、單次最長停機時間:為1小時

復(fù)制回路,一次搞定

下面介紹一下,如何在一個實例下,通過三個數(shù)據(jù)庫,建立一個復(fù)制回路,完成上面的需求

實驗環(huán)境:一臺電腦,一個SQL Server實例,SQL Server2012, Windows7

復(fù)制類型為事務(wù)復(fù)制

結(jié)構(gòu)圖

從上圖可以看出,由于都是在同一個實例,同一臺機器下,所以機器磁盤需要有足夠的磁盤空間!!

因為[testloopbackA]庫有一個[testAltertype]表100G,復(fù)制到[testloopbackB]庫[testAltertype]表100G

復(fù)制到[testloopbackC]庫[testAltertype]表100G,最后復(fù)制回去[testloopbackA]庫[testAltertype]表100G

加上生成的快照文件,當(dāng)然快照文件可能會壓縮,但是一定要保證有足夠的磁盤空間

下面是具體演示

1、建庫腳本

USE [master]GO/****** Object:  Database [testloopbackA]    Script Date: 2015/6/3 8:21:01 ******/CREATE DATABASE [testloopbackA] CONTAINMENT = NONE ON  PRIMARY ( NAME = N'testloopbackA', FILENAME = N'D:/DataBase/testloopbackA.mdf' , SIZE = 30720KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),  FILEGROUP [FG_testChangepartition_Id_01] ( NAME = N'FG_testChangepartition_Id_01_data', FILENAME = N'D:/DataBase/testloopbackA/FG_testChangepartition_Id_01_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),  FILEGROUP [FG_testChangepartition_Id_02] ( NAME = N'FG_testChangepartition_Id_02_data', FILENAME = N'D:/DataBase/testloopbackA/FG_testChangepartition_Id_02_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ) LOG ON ( NAME = N'testloopbackA_log', FILENAME = N'D:/DataBase/testloopbackA_log.ldf' , SIZE = 2432KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GOUSE [master]GO/****** Object:  Database [testloopbackB]    Script Date: 2015/6/3 8:22:11 ******/CREATE DATABASE [testloopbackB] CONTAINMENT = NONE ON  PRIMARY ( NAME = N'testloopbackB', FILENAME = N'D:/DataBase/testloopbackB.mdf' , SIZE = 30720KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),  FILEGROUP [FG_testChangepartition_Id_01] ( NAME = N'FG_testChangepartition_Id_01_data', FILENAME = N'D:/DataBase/testloopbackB/FG_testChangepartition_Id_01_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),  FILEGROUP [FG_testChangepartition_Id_02] ( NAME = N'FG_testChangepartition_Id_02_data', FILENAME = N'D:/DataBase/testloopbackB/FG_testChangepartition_Id_02_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ) LOG ON ( NAME = N'testloopbackB_log', FILENAME = N'D:/DataBase/testloopbackB_log.ldf' , SIZE = 2432KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GOUSE [master]GO/****** Object:  Database [testloopbackC]    Script Date: 2015/6/3 8:22:14 ******/CREATE DATABASE [testloopbackC] CONTAINMENT = NONE ON  PRIMARY ( NAME = N'testloopbackC', FILENAME = N'D:/DataBase/testloopbackC.mdf' , SIZE = 30720KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ),  FILEGROUP [FG_testChangepartition_Id_01] ( NAME = N'FG_testChangepartition_Id_01_data', FILENAME = N'D:/DataBase/testloopbackC/FG_testChangepartition_Id_01_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ),  FILEGROUP [FG_testChangepartition_Id_02] ( NAME = N'FG_testChangepartition_Id_02_data', FILENAME = N'D:/DataBase/testloopbackC/FG_testChangepartition_Id_02_data.ndf' , SIZE = 24576KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1048576KB ) LOG ON ( NAME = N'testloopbackC_log', FILENAME = N'D:/DataBase/testloopbackC_log.ldf' , SIZE = 2432KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
View Code

下面分區(qū)方案和分區(qū)函數(shù)都在三個庫上執(zhí)行

--1.創(chuàng)建分區(qū)函數(shù)CREATE PARTITION FUNCTIONFun_testChangepartition_Id(INT) ASRANGE LEFTFOR VALUES(2)--2.創(chuàng)建分區(qū)方案CREATE PARTITION SCHEME[Sch_testChangepartition_Id] aspARTITION [Fun_testChangepartition_Id]TO([FG_testChangepartition_Id_01],[FG_testChangepartition_Id_02])

建表腳本

USE [testloopbackA]GO--更改數(shù)據(jù)類型CREATE TABLE [testAltertype](id INT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(100))GO--變分區(qū)表CREATE TABLE [testChangepartition](id INT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(100))GO--插入測試數(shù)據(jù)INSERT INTO [dbo].[testAltertype]        ( [name] )VALUES  ( N'nihao'  -- name - nvarchar(100)          )INSERT INTO [dbo].[testChangepartition]        ( [name] )VALUES  ( N'nihao'  -- name - nvarchar(100)          )SELECT * FROM [testAltertype]SELECT * FROM [testChangepartition]
View Code

2、在[testloopbackB]庫先建好2個表

USE [testloopbackB]GO--更改數(shù)據(jù)類型CREATE TABLE testAltertype_new(id BIGINT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(100))GO--變分區(qū)表CREATE TABLE testChangepartition_new(id INT IDENTITY(1,1) PRIMARY KEY,name NVARCHAR(100)) ON [Sch_testChangepartition_Id](id)GO

3、創(chuàng)建[testloopbackA]庫到[testloopbackB]庫的發(fā)布,這一步很關(guān)鍵,因為在發(fā)布的時候需要修改項目屬性,在發(fā)布屬性里,還需要選擇快照為字符類型

testChangepartition_new表

testAltertype_new表

[testloopbackA]庫到[testloopbackB]庫的復(fù)制

4、建立[pub_testloopbackAtotestloopbackB]發(fā)布的訂閱

5、在[testloopbackB]庫里, 將[testAltertype_new]表和[testChangepartition_new]表里的id列里的不用于復(fù)制設(shè)置為"是"

[testAltertype_new]表

[testChangepartition_new]表

6、測試

在[testloopbackA]庫的[testAltertype]表和[testChangepartition]表各插入一些記錄

USE [testloopbackA]GO--插入測試數(shù)據(jù)INSERT INTO [dbo].[testAltertype]        ( [name] )VALUES  ( N'nihao2'  -- name - nvarchar(100)          )INSERT INTO [dbo].[testChangepartition]        ( [name] )VALUES  ( N'nihao2'  -- name - nvarchar(100)          )SELECT * FROM [testAltertype]SELECT * FROM [testChangepartition]

在[testloopbackB]庫就能看到新插入的記錄

USE [testloopbackB]GOSELECT * FROM [dbo].[testAltertype_new]SELECT * FROM [dbo].[testChangepartition_new]

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌兰县| 元朗区| 田阳县| 乳源| 长治市| 崇文区| 渭南市| 新和县| 鹿邑县| 霞浦县| 崇州市| 子洲县| 龙里县| 福海县| 西藏| 香港 | 孝感市| 邵东县| 商南县| 武隆县| 阜新市| 廊坊市| 文登市| 巫溪县| 甘肃省| 吉安县| 东兴市| 长白| 灌南县| 桃源县| 沐川县| 会泽县| 葵青区| 云梦县| 渑池县| 姚安县| 山西省| 娄底市| 黄陵县| 榆树市| 铁岭县|