澳门美高梅游戏官方网站 > 澳门美高梅游戏 > 高可用故障转移,SQL管理数据现身

原标题:高可用故障转移,SQL管理数据现身

浏览次数:194 时间:2019-12-28

1.政工的概念

东西是意气风发种机制,是风度翩翩种操作系列,它包蕴了数据库风流倜傥组操作命令,那组命令要么全部实践,要么都不执行。由那件事物是大器晚成组不可分割的事物逻辑单元,在数据库举行并发操作时候,事物是当作最小的主宰单元来使用的,这极其适用于多客商同一时候操作的数量通讯系统。比如:买票、银行、保险集团甚至股票交易系统等。

二台sql服务器配置ISCSI虚构磁盘

      在上篇我们选取ISCSI Target软件在DC-ISCSCI上成立了四个ISCSI虚拟磁盘,在上面大家将为大家介绍SQL-CL01(hsr1 50卡塔尔(英语:State of Qatar)和SQL-CL02(hsr2  51卡塔尔(قطر‎怎么着访谈这个ISCSI设想磁盘.

       SQL-CL01和SQL-CL02可以运用ISCSI公约访问DC-ISCSCI上的设想ISCSI磁盘,由于Windows Server 二零零六曾经松开了ISCSI合同,因而大家无需在SQL-CL01和SQL-CL02上设置ISCSI客商端软件。要是SQL-CL01和SQL-CL02的操作系统是Windows Server 二零零三,这大家就须求在Server1和Server2上设置ISCSI发起程序了.

      上面咱们以SQL-CL01(hsr1 50卡塔尔(قطر‎为例为我们演示怎样在Windows Server 2008LAND2上访谈ISCSI磁盘,大家在SQL-CL01的管理工具中实行“ISCSI 发起程序”。如图上面所示,系统提醒大家ISCSI服务未有运营,是或不是需求运维ISCSI服务并将服务设置为电动运营,我们挑选“Yes”。

      图片 1

        在指标输入的ISCSI SECR-VVE昂Cora的IP地址192.168.2.52(ABC-DC)然后单击急迅链接.

         注意在指标iscsi上假使启用意况

         图片 2

        图片 3

      状态:已链接

        图片 4

   切换成开掘标签下我们见到链接到的ISCSI Server的地点及气象

        图片 5

        然后切换成卷和道具处,单击自动配置,会自动配置刚才所链接到的虚构磁盘

        图片 6

        SQL-CL01(hsr 50卡塔尔(قطر‎利用ISCSI发起程序连接到了ABC-DC上的ISCSI磁盘后,在SQL-CL01的磁盘微处理机中就足以对ISCSI磁盘进行田间管理了。

        如图下图所示,在SQL-CL01的磁盘管理中,大家发掘SQL-CL01中多了三块磁盘,一块30G、一块10G、3G那三块磁盘正是ABC-DC上创制的ISCSI设想磁盘

        然后我们开垦Server1(hsr ip 50卡塔尔(قطر‎的磁盘管理,查看磁盘状态

        图片 7

        大家对三块ISCSI设想磁盘实行协同、先导化、分区,格式化。如图下图所示

         5G的ISCSI磁盘分配了S盘符,S盘将用来存款和储蓄SQL数据。

         2G的ISCSI磁盘分配了L盘符,L盘将用作存款和储蓄SQL的日志磁盘。

         2G的ISCSI磁盘分配了Q盘符,Q盘符作为集合的决定磁盘。

      下边是首先块磁盘命名叫Q盘作为会集的核定磁盘

     图片 8

      图片 9

     图片 10

      图片 11

 全体陈设完毕后SQL-CL01(hsr 50卡塔尔如下图(L sql日志盘, Q仲裁盘,  S  sql数据盘)

        图片 12

      SQL-CL01(hsr 50卡塔尔(قطر‎设置甘休后,大家须求在SQL-CL02(hsr 51卡塔尔(英语:State of Qatar)上海展览中心开相通的ISCSI设置,并且对ABC-DC上的三块ISCSI虚构磁盘分配相像的盘符,那样

  就在SQL-CL01和SQL-CL02上就能够访问早先创造的ISCSI磁盘了。

     SQL-CL02(hsr 51卡塔尔国那台不用在初阶化、分区,格式化,只需求一块就能够了

        图片 13

    联机

      图片 14

    如下图将E盘修正盘符,与hsr 50 的一样

      图片 15

    二台sql服务器已加多了设想磁盘管理

         图片 16

        图片 17

 

MySQL协理的数据类型超级多,那么选用适用的数据类型对于得到高品质就注重。那么就先驾驭各连串型的优缺点!

1 制造MaxIdProcess表,由于存款和储蓄ID的最大值

 最后测量试验

 安装完二个sql server 节点后,对外的虚构ip是192.168.2.105

 图片 18

高可用故障转移,SQL管理数据现身。 

测量试验将sql server转到另大器晚成节点

  图片 19

  转移后连连sql 设想ip 测量试验

    图片 20   

         通过windows日志查看远行状态

          图片 21

2.事物的4大属性

  • 原子性:事物是三个完好无损的操作;
  • 隔开分离性:对数码开展更动的有着并发事物都是相互隔开分离的;
  • 黄金时代致性:当事物完毕时,事物必需处于同意气风发的意况;
  • 长久性:事物实现后,对于系统的熏陶是恒久的;

风流洒脱、类型介绍

CREATE TABLE [dbo].[MaxIdProcess](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,    --自增ID
    [TableNM] [nvarchar](200) NOT NULL,    --存储表明
    [Prefix] [nvarchar](50) NULL,    --ID前缀
    [Radix] [char](2) NULL,    --
    [MaxId] [nvarchar](50) NULL,    --存储最大ID
    [CreateDatetime] [datetime] NULL,    --创建时间
    [LastModifyDatetime] [datetime] NULL,
    [LastModifyBy] [nvarchar](50) NULL,
 CONSTRAINT [PK_MaxIdProcess] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

总结

           到此地故障转移会集就配备完结了,   通过后生可畏雨后春笋的安顿,会发觉实现起来照旧很麻烦。

       也是丰硕发挥了wondows平台与sqlserver产物的紧凑联系,包涵AlwaysOn 技巧也是着力windows故障转移之上 。

        一路兑现配置过来,会发觉众多标题,需求停住查找难题解析化解,上边是遇上的难题及缓慢解决方式

      1.  系统不要克隆的,要完全安装的(为了搭建的贞烈, 3台机械都是单独设置,不选择虚机复制)。

      2.  系统装完后,测量检验下sqlserver能还是无法安装(能进来sql安装分界面后撤回安装)

      3. 在验证会集时战败,磁盘不能写入时,解决办法是磁盘格式化在印证群集

      4.  sql 节点服务器增添域后,要在组的administrators组里增添域账户

       图片 22

 

        5.在开创虚构磁盘时(日志,数据,仲裁卡塔尔国,最佳为每种磁盘制造不相似的长空,那样轻便分化。注意磁盘都是ntfs 格式

        6.在装置数据库集群时,验证时网络绑定顺序现身警报

               查看ipconfig /all 发现在安装了群集软件后,操作系统多个三个东躲湖南的虚构网卡,那些网卡名称是MicrosoftFailover Cluster Virtual Adapter。

              图片 23

 

             图片 24

           解决方案:

            获得此虚构网的UUID

            在注册表改良网络绑定的次第

           C:>wmicnicconfig get description, SettingID

          图片 25

            获取到了此UUID

          图片 26

          改进注册表

           HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipLinkage下的BIND,双击进行编辑。将划分移动到终极。

           图片 27

        图片 28

 

3.创办事物

  • 千帆竞发事物:transaction begin
  • 付出事物:commit transaction
  • 回滚事物:rollback transaction

1、整型类型

2、创立存款和储蓄进程 Pro_GetTableNextMaxIdByTableName 得到最大ID

4.事物的归类

  • 展现事物:用begin transaction 分明钦赐事物的起来,用commit transaction, rollback transaction来终结恐怕回滚事务
  • 隐示事物(自动提交事物):隐式事务则在执完语句后自动提交业务

  整型类型有: TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 。他们分别占8,16,24,32,陆十五位积累空间。可存储的整数范围为-2^(N-1卡塔尔(英语:State of Qatar)到2^(N-1卡塔尔国-1,此中N是存款和储蓄空间的位数。

 1 CREATE procedure [dbo].[Pro_GetTableNextMaxIdByTableName]  
 2 @TableName char(50),  --table名称
 3 @Prefix char(3),  --ID前缀
 4 @NextId char(16) out    --ID输出
 5 AS
 6 
 7 begin 
 8     --if not exists (select * from MaxIdProcess where TableName=@TableName)
 9     --begin
10     --    insert into MaxIdProcess values(@TableName,null)
11     --end
12     --    update MaxIdProcess 
13     --        set @NextId= isnull(MaxId, @Prefix + '0000000000001'),
14     --                MaxId = dbo.Fun_GetMaxId(MaxId,@Prefix)
15     --    where TableName=@TableName
16 
17 
18     --检查系统表中是否存在该表,如果不存在则调用Pro_GetRandomStr存储过程获取一个随机ID
19    IF EXISTS (SELECT object_id FROM sys.objects(nolock) WHERE type='U' AND name=@TableName)
20    BEGIN
21         EXEC Pro_GetRandomStr @NextId output
22         RETURN 
23    END 
24     
25     --检查MaxIdProcess表中是否存有需要获取ID的表名,如果不存在则插入数据
26    if not exists (select * from MaxIdProcess where TableNM=rtrim(@TableName))
27     begin
28         insert into MaxIdProcess values(@TableName,@Prefix,'10',0,getdate(),getdate(),'Auto')
29     end
30     
31         declare @temp bigint
32         update MaxIdProcess
33         set @temp=cast(rtrim(MaxId) as bigint),MaxId=MaxId+1
34         where rtrim(TableNM)=rtrim(@TableName)
35         set @NextId=@Prefix+right(cast(1000000000000000+@temp as nvarchar(16)),13)
36 end

5.事例

 完毕转账操作,转账人出账和收账人入账是意气风发组完整的操作类别,必得全方位成就或不做到,思虑一张顾客卡包表(tbUserWallet),转账交易记录表(tbTransaction),轻便设计如下

图片 29 图片 30

向客商钱袋表(tbUserWallet)加多测量检验数据

图片 31

始建转账存款和储蓄事物

USE [TEST]
GO

/****** Object:  StoredProcedure [dbo].[pAddTransaction]    Script Date: 2018/5/21 12:44:59 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:  yangyi
-- Create date: 18/05/21
-- Description: 转账
-- =============================================
CREATE PROCEDURE [dbo].[pAddTransaction]
@InOpenID uniqueidentifier,
@InTDesc nvarchar(50),
@OutOpenID uniqueidentifier,
@OutTDesc nvarchar(50),
@TAmount decimal(10, 2),
@TTID int,
@Result int output
AS
BEGIN
 IF((SELECT Amount FROM tbUserWallet WHERE OpenID=@OutOpenID)>=@TAmount)
 BEGIN
  BEGIN TRANSACTION
   BEGIN TRY
    UPDATE tbUserWallet SET Amount=Amount-@TAmount WHERE OpenID=@OutOpenID
    UPDATE tbUserWallet SET Amount=Amount+@TAmount WHERE OpenID=@InOpenID
    --SELECT 1+'A'
    INSERT INTO [dbo].[tbTransaction]([TID],[OpenID],[TAmount],[TTID],[TDesc],[CreateDT])VALUES(NEWID(),@InOpenID,@TAmount,@TTID,@InTDesc,GETDATE())
    INSERT INTO [dbo].[tbTransaction]([TID],[OpenID],[TAmount],[TTID],[TDesc],[CreateDT])VALUES(NEWID(),@OutOpenID,-@TAmount,@TTID,@OutTDesc,GETDATE())
   END TRY
   BEGIN  CATCH
    IF(@@TRANCOUNT>0)
    BEGIN
     SET @Result=-1
     PRINT '事物执行出错,回滚'
     ROLLBACK TRANSACTION
    END
   END CATCH
  IF(@@TRANCOUNT>0)
  BEGIN
   SET @Result=1
   PRINT '一切按预期计划执行'
   COMMIT TRANSACTION
  END
 END
 ELSE
 BEGIN
  PRINT '转账人金额不足'
  SET @Result=0
 END
END

GO

测量试验1>:转账人金额不足测量检验

USE [TEST]
GO

DECLARE @return_value int,
  @Result int

EXEC @return_value = [dbo].[pAddTransaction]
  @InOpenID = '1ccd524d-de62-47ca-87d3-38787b040ba3',
  @InTDesc = N'收到A的转账100',
  @OutOpenID = '2ccd524d-de62-47ca-87d3-38787b040ba3',
  @OutTDesc = N'转账给A100',
  @TAmount = 100,
  @TTID = 1,
  @Result = @Result OUTPUT

SELECT @Result as N'@Result'

GO

图片 32

测量检验2>:模拟事物现身谬误,举办回滚

打消存款和储蓄事物中的:SELECT 1+'A' 注释(模拟事物中生出错误)

USE [TEST]
GO

DECLARE @return_value int,
  @Result int

EXEC @return_value = [dbo].[pAddTransaction]
  @InOpenID = '2ccd524d-de62-47ca-87d3-38787b040ba3',
  @InTDesc = N'收到A的转账100',
  @OutOpenID = '1ccd524d-de62-47ca-87d3-38787b040ba3',
  @OutTDesc = N'转账给A100',
  @TAmount = 100,
  @TTID = 1,
  @Result = @Result OUTPUT

SELECT @Result as N'@Result'

GO

图片 33  

测量试验3.>施行成功测量检验,注释 SELECT 1+'A' 

USE [TEST]
GO

DECLARE @return_value int,
  @Result int

EXEC @return_value = [dbo].[pAddTransaction]
  @InOpenID = '2ccd524d-de62-47ca-87d3-38787b040ba3',
  @InTDesc = N'收到A的转账100',
  @OutOpenID = '1ccd524d-de62-47ca-87d3-38787b040ba3',
  @OutTDesc = N'转账给A100',
  @TAmount = 100,
  @TTID = 1,
  @Result = @Result OUTPUT

SELECT @Result as N'@Result'

GO

图片 34

 

还足以将整数类型设为 UNSIGNED ,那样大致能够是其范围增大生机勃勃倍。比如TINYINT范围是-128

3、创设实施存款和储蓄进度,如插入新添客商

  • 127,而TINYINT UNSIGNED的限量是0-255。不过那三种只是在限定上有缺别,在蕴藏空间和质量上都以生机勃勃律的。
CREATE PROCEDURE [dbo].[Pro_User_Insert]
     @UserId CHAR(16) OUT ,
     @UserNM NVARCHAR(50) ,
     @Description NVARCHAR(255) 
AS

BEGIN TRY
    BEGIN
        DECLARE @Name NVARCHAR(50);
        SELECT  @UserId = UsersTb.UserId ,
                @Name = UsersTb.Description
        FROM    dbo.UsersTb
        WHERE   UsersTb.UserNM = @UserNM;
        IF NOT ISNULL(@UserId, '') = ''
        BEGIN
          SELECT  @UserNM + @Name + '已经存在';
          --SELECT  '用户已经存在';
          RETURN;
        END;
        DECLARE @MaxId CHAR(16);  
        EXEC dbo.GetTableNextMaxIdByTableName 'User', 'Usr', @MaxId OUT;    
        SET @UserId = @MaxId;

        INSERT  INTO UsersTb
        (
         [UserId] ,
         [UserNM] ,
         [Description] 
        )
        VALUES
        (
            @UserId ,
            @UserNM,
            @Description
        );
        SELECT  '执行成功';
    END
 END TRY
  BEGIN CATCH
    SELECT  ERROR_MESSAGE(); 
  END CATCH

 

4、推行新添顾客存款和储蓄进程

2、实数类型

DECLARE @UserId int;
EXEC Pro_User_Insert @UserId output,'zhangsan','张三' ;

  对于实数类型,MySQL即支持标准类型(DEC福睿斯IDEHavalL卡塔尔国,也支撑不正确类型(FLOAT,DOUBLE卡塔尔。

5、完成

  DEPASSATL类型允许最多囤积六15人数字,因而它能够积攒比BIGINT还大的数字。并且在MySQL5.0或越来越高版本中,MySQL服务器自己落成的DEViosL的高精度总计。但绝比较浮点类型,因为CPU直接帮助原声浮点总计,所以浮点类型总计会更加快。

 

本文由澳门美高梅游戏官方网站发布于澳门美高梅游戏,转载请注明出处:高可用故障转移,SQL管理数据现身

关键词:

上一篇:触发器学习,二〇〇九从入门到明白澳门美高梅

下一篇:没有了