最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法

 更新時(shí)間:2016年01月22日 15:06:33   投稿:lijiao  
這篇文章主要介紹了SQL Server中避免觸發(fā)鏡像SUSPEND的N種方法,需要的朋友可以參考下

背景:
我們?cè)谑褂脭?shù)據(jù)庫的過程中,很多時(shí)候要追求性能,特別在處理大批量數(shù)據(jù)的時(shí)候更希望快速處理。那么對(duì)SQL SERVER而言,數(shù)據(jù)庫實(shí)現(xiàn)大批量插入的優(yōu)化方案,這里特別介紹通過大容量插入的一種方式。
基本原理:
簡單恢復(fù)模式按最小方式記錄大多數(shù)大容量操作,對(duì)于完整恢復(fù)模式下的數(shù)據(jù)庫,大容量導(dǎo)入期間執(zhí)行的所有行插入操作被完整地記錄到事務(wù)日志中。如果數(shù)據(jù)導(dǎo)入量較大,會(huì)導(dǎo)致迅速填滿事務(wù)日志。對(duì)于大容量導(dǎo)入操作,按最小方式記錄比完整記錄更有效,并減少了大容量導(dǎo)入操作填滿日志空間的可能性,所以性能會(huì)得到極大的提升。
       但是,大容量導(dǎo)入中按最小方式記錄日志的前提條件需要滿足:
1. 當(dāng)前沒有復(fù)制表
2. 指定了表鎖定:

注意:鎖定是 SQL Server 數(shù)據(jù)庫引擎用來對(duì)多個(gè)用戶同時(shí)訪問同一數(shù)據(jù)塊的操作進(jìn)行同步。當(dāng)事務(wù)修改某個(gè)數(shù)據(jù)塊時(shí),它將持有保護(hù)所做修改的鎖,直到事務(wù)結(jié)束。指定大容量導(dǎo)入操作的表鎖定后,該表將在大容量導(dǎo)入操作期間采取大容量更新 (BU) 鎖定。大容量更新 (BU) 鎖允許多個(gè)線程將數(shù)據(jù)并發(fā)地大容量導(dǎo)入到同一表中,同時(shí)阻止其他不進(jìn)行大容量導(dǎo)入數(shù)據(jù)的進(jìn)程訪問該表。表鎖定可以通過減少表的鎖爭用來提高大容量導(dǎo)入操作的性能。
基本的理論信息還很多,這里不再累述。 

在阿里云SQL SERVER的主備架構(gòu)中,使用大容量插入時(shí),使用時(shí)需要特別留意一個(gè)特性需要明確指定,如果不指定,會(huì)觸發(fā)微軟尚未在SQL Server 2008 R2中未修復(fù)的BUG,會(huì)導(dǎo)致鏡像SUSPEND,那么如何來避免各種情況呢? 下面列舉了一些常見的場景:
 1、通過ado.net sqlbulkcopy 方式:
只需要將SqlBulkCopy 指定SqlBulkCopyOptions.CheckConstraints就好,數(shù)據(jù)庫指定AdventureWorks2008R2的Person表。舉個(gè)例子:

static void Main()
{
  string srcConnString = "Data Source=(local);Integrated Security=true;Initial Catalog=testdb";
  string desConnString = "Data Source=****.sqlserver.rds.aliyuncs.com,3433;User ID=**;Password=**;Initial Catalog=testdb";
 
  SqlConnection srcConnection = new SqlConnection();
  SqlConnection desConnection = new SqlConnection();
 
  SqlCommand sqlcmd = new SqlCommand();
  SqlDataAdapter da = new SqlDataAdapter();
  DataTable dt = new DataTable();
 
  srcConnection.ConnectionString = srcConnString;
  desConnection.ConnectionString = desConnString;
  sqlcmd.Connection = srcConnection;
 
  sqlcmd.CommandText = @"SELECT top 1000000 [PersonType],[NameStyle],[Title],[FirstName],[MiddleName],[LastName],[Suffix],[EmailPromotion]
           ,[AdditionalContactInfo],[Demographics],NULL as rowguid,[ModifiedDate] FROM [testdb].[dbo].[Person]";
  sqlcmd.CommandType = CommandType.Text;
  sqlcmd.Connection.Open();
  da.SelectCommand = sqlcmd;
  da.Fill(dt);
 
 
  using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.CheckConstraints))
  //using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.Default))
  {
    blkcpy.BatchSize = 2000;
    blkcpy.BulkCopyTimeout = 5000;
    blkcpy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
    blkcpy.NotifyAfter = 2000;
 
    foreach (DataColumn dc in dt.Columns)
    {
      blkcpy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
    }
 
    try
    {
      blkcpy.DestinationTableName = "Person";
      blkcpy.WriteToServer(dt);
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
    }
    finally
    {
      sqlcmd.Clone();
      srcConnection.Close();
      desConnection.Close();
 
    }
  }
 
}
 
private static void OnSqlRowsCopied(
  object sender, SqlRowsCopiedEventArgs e)
{
  Console.WriteLine("Copied {0} so far...", e.RowsCopied);
}

 2、通過jdbc  sqlbulkcopy 方式:
只需要在初始化對(duì)象時(shí)指定setCheckConstraints屬性為TRUE,例如:
QLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setCheckConstraints(true);
3、通過DTS/SSIS方式:
1.    import/export data方式需要先保存SSIS包,然后修改Connection Manager的屬性

 

2.    直接使用SQL Server Business Intelligence Development Stuidio新建 SSIS包

3、通過BCP方式
1.      先將數(shù)據(jù)BCP出來 BCP ...OUT
BCP testdb.dbo.person Out "bcp_data" /t  /N /U **** /P *** /S "****.sqlserver.rds.aliyuncs.com,3433"
2.      然后將數(shù)據(jù)BCP進(jìn)去 BCP...IN ,但需要指定提示:/h "CHECK_CONSTRAINTS"
BCP testdb.dbo.person In "bcp_data" /C /N /q /k /h "CHECK_CONSTRAINTS" /U *** /P *** /b 500 /S  "***.sqlserver.rds.aliyuncs.com,3433"
 4、通過bulk insert方式(在RDS不可是實(shí)現(xiàn),因?yàn)椴辉试S上傳文件)

BULK INSERT testdb.dbo.person_in
FROM N'D:\trace\bcp.txt'
WITH
(
 CHECK_CONSTRAINTS 
);

四種方式教你在SQL Server中避免觸發(fā)鏡像SUSPEND,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法

    SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法

    這篇文章主要介紹了SQL Server數(shù)據(jù)表字段自定義自增數(shù)據(jù)格式的方法,結(jié)合實(shí)例形式分析了SQL Server自增數(shù)據(jù)格式的定義方法與具體實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2016-08-08
  • SQL 雙親節(jié)點(diǎn)查找所有子節(jié)點(diǎn)的實(shí)現(xiàn)方法

    SQL 雙親節(jié)點(diǎn)查找所有子節(jié)點(diǎn)的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猄QL 雙親節(jié)點(diǎn)查找所有子節(jié)點(diǎn)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • sqlserver 文件數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的比較

    sqlserver 文件數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的比較

    本文概要地從數(shù)據(jù)格式、數(shù)據(jù)庫結(jié)構(gòu)和WEB發(fā)布數(shù)據(jù)三個(gè)方面比較了文件數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的異同,同時(shí)差別了文件數(shù)據(jù)庫和過去存儲(chǔ)數(shù)據(jù)的文件系統(tǒng)的不同
    2011-10-10
  • SQL Server文件組的用法和原理

    SQL Server文件組的用法和原理

    數(shù)據(jù)文件的組合,稱作文件組(File Group),數(shù)據(jù)庫不能直接設(shè)置存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)文件,而是通過文件組來指定,本文給大家詳細(xì)的介紹了SQL Server文件組,并通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • sql編程工具Sql Prompt下載及安裝破解圖文教程

    sql編程工具Sql Prompt下載及安裝破解圖文教程

    SQL Prompt是一款擁有SQL智能提示功能的SQL Server和VS插件。SQL Prompt能根據(jù)數(shù)據(jù)庫的對(duì)象名稱,語法和用戶編寫的代碼片段自動(dòng)進(jìn)行檢索,智能的為用戶提供唯一合適的代碼選擇。自動(dòng)腳本設(shè)置為用戶提供了簡單的代碼易讀性--這在開發(fā)者使用的是不大熟悉的腳本時(shí)尤其有用
    2014-08-08
  • SSMS中出現(xiàn)兩個(gè)相同的服務(wù)器名稱的問題解決

    SSMS中出現(xiàn)兩個(gè)相同的服務(wù)器名稱的問題解決

    在SSMS的【連接到服務(wù)器】頁面,有時(shí)候可能會(huì)出現(xiàn)多個(gè)相同的服務(wù)器名稱本文主要介紹了SSMS中出現(xiàn)兩個(gè)相同的服務(wù)器名稱的問題解決,感興趣的可以了解一下
    2024-05-05
  • 淺談為什么#{}可以防止SQL注入

    淺談為什么#{}可以防止SQL注入

    本文主要介紹了淺談為什么#{}可以防止SQL注入,#{} 匹配的是一個(gè)占位符,會(huì)對(duì)一些敏感字符進(jìn)行過濾,編譯過后會(huì)對(duì)傳遞的值加上雙引號(hào),因此可以防止 SQL 注入問題,感興趣的可以來了解一下
    2022-05-05
  • 淺談SQL Server中統(tǒng)計(jì)對(duì)于查詢的影響分析

    淺談SQL Server中統(tǒng)計(jì)對(duì)于查詢的影響分析

    SQL Server查詢分析器是基于開銷的。通常來講,查詢分析器會(huì)根據(jù)謂詞來確定該如何選擇高效的查詢路線,比如該選擇哪個(gè)索引
    2012-05-05
  • 行轉(zhuǎn)列之SQL SERVER PIVOT與用法詳解

    行轉(zhuǎn)列之SQL SERVER PIVOT與用法詳解

    這篇文章主要給大家介紹了關(guān)于行轉(zhuǎn)列之SQL SERVER PIVOT與用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SQL SERVER具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • SQL?Server新特性SequenceNumber用法介紹

    SQL?Server新特性SequenceNumber用法介紹

    這篇文章介紹了SQL?Server新特性SequenceNumber的用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評(píng)論

分宜县| 福泉市| 嵊泗县| 房产| 湘乡市| 翁牛特旗| 永定县| 韩城市| 浮山县| 赣州市| 舒兰市| 绍兴县| 日土县| 漳州市| 台山市| 堆龙德庆县| 二连浩特市| 三穗县| 怀来县| 容城县| 石城县| 遂川县| 富宁县| 始兴县| 德州市| 文登市| 柏乡县| 朝阳县| 高淳县| 孝义市| 融水| 榆中县| 咸阳市| 溆浦县| 珠海市| 奉新县| 通州市| 乌兰县| 时尚| 裕民县| 内江市|