AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-47327

Bogdan Bogdanov's questions

Martin Hope
Bogdan Bogdanov
Asked: 2017-12-02 05:41:44 +0800 CST

特信行为问题?

  • 0

我以非常模糊的方式提问,因为我无法用简短的句子解释我的问题是什么。

一般来说,我有一组转换文本和 XML 的过程。在程序中,我有很多变量NVARCHAR和XML一个带XML列的表。在我的数据中,我有特殊字母(例如ò)。当我运行所有代码时,特殊字符消失并显示为?- 这意味着我得到VARCHAR的不是NVARCHAR.

总的来说,在最后一步之前我一切正常。我得到了EXECwhich call 存储过程,其中包含 ad hoc 类型的构造变量NVARCHAR。我有一个包含XML字段的表。在这种情况下,我得到了?。如果我手动运行程序(不是在EXEC INTO),我会得到正确的符号。

为什么会发生这种情况的任何想法?我检查了所有变量,它们是NVARCHAR.

sql-server-2012 xml
  • 1 个回答
  • 48 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-11-23 09:49:28 +0800 CST

SQL Server 2012 SP4 与带有 CU-10 的 SP3 之间有什么区别?

  • 1

抱歉,这可能是一个非常愚蠢的问题,但是 SQL Server 2012 SP4 和 SQL Server 2012 SP3 + CU-10 之间有什么区别?

sql-server-2012 patching
  • 1 个回答
  • 805 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-11-14 06:38:27 +0800 CST

对于 SQL Server 2012,哪里是限制行的更好方法(WHERE 或 JOIN)?[复制]

  • 2
这个问题在这里已经有了答案:
连接是否在运行时针对 where 子句进行了优化? (4 个答案)
4 年前关闭。

我仍然不明白 - 限制子句内部数据WHERE或内部JOIN子句中的数据对性能来说更好吗?哪种方法更好?我很久以前就读过没有区别,但我仍然不确定。我说的是INNER JOIN - 在这种情况下结果是一样的。

例子:

SELECT * FROM A JOIN B ON (A.X = B.Y) WHERE (A.Z = 5);

对比

SELECT * FROM A JOIN B ON (A.X = B.Y) AND (A.Z = 5);
sql-server sql-server-2012
  • 1 个回答
  • 65 Views
Martin Hope
Bogdan Bogdanov
Asked: 2017-03-02 06:01:25 +0800 CST

删除相似数量的行如何导致截然不同的日志增长?

  • 2

我有(在我看来)SQL Server 日志增长的非常奇怪的行为。我有一个大约 8GB 日志大小的数据库。我备份了事务日志并开始删除大约 400 万行。日志文件没有增长。然后我尝试从另一个表中删除另外 490 万 - 日志文件增长到大约 26 GB 并填满了驱动器。

我设法解决了这个问题,但我很好奇 - 因为(据我所知)日志文件只包含删除记录的命令(在这种情况下),当数字时,2 个操作之间怎么会有这么大的差异受影响的行数仅相差 20%?

sql-server sql-server-2012
  • 1 个回答
  • 54 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-12-15 01:57:29 +0800 CST

如何以 DBName 为参数从另一个数据库中动态提取数据?

  • 1

我有一个主数据库 ( MAIN) 和几个客户端数据库 ( CLIENTDB)。我需要开始查询MAIN并从中获取数据CLIENTDB。客户端数据库也可以在链接服务器上找到。我的问题是我需要在一个函数中执行此操作EXEC,所以我可以得到SELECT * FROM SRV.CLIENTDB,但是 SQL Server 不允许这样做。还有另一种方法吗?

我需要在函数内部有代码:

DECLARE @sSRV AS VARCHAR(128) = 'SRV';
DECLARE @sDB AS VARCHAR(128) = 'CLIENTDB1';

EXEC('SELECT * FROM ' + sSRV + '.' + @sDB + '.MyTable');

我需要一个函数,因为我需要在我的引擎中与它进行连接。

sql-server sql-server-2012
  • 3 个回答
  • 2313 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-11-24 05:52:45 +0800 CST

可以参与 SET 操作的局部变量的最大数量是多少?

  • 11

我有一个包含业务逻辑的存储过程。在它里面我有大约 1609 个变量(不要问我为什么,这就是引擎的工作原理)。我尝试将SET一个变量连接到所有其他变量的连接值。结果在创建过程中出现错误:

消息 8631,级别 17,状态 1,过程 XXX,行 YYY 内部错误:已达到服务器堆栈限制。请在您的查询中寻找潜在的深层嵌套,并尝试简化它。

我发现错误是由于我需要在SET操作中使用的变量数量造成的。我可以通过将其分成两部分来执行任务。

我的问题是这方面有一些限制吗?我查了,但没有找到。

我们检查了此 KB中描述的错误,但这不是我们的情况。我们在代码中不使用任何CASE表达式。我们使用该临时变量来准备必须使用 CLR 函数替换的值列表。我们将 SQL Server 更新到 SP3 CU6(最新),但我们仍然遇到错误。

sql-server sql-server-2012
  • 4 个回答
  • 3389 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-27 00:33:57 +0800 CST

如何避免链接服务器的 Msg 9514, Level 16, State 1, Line 3 错误?

  • 1

我有一个查询来比较我的本地 SQL Server 和链接的 SQL Server 之间的数据。我的问题是我比较的表包含 XML 列。我得到:

消息 9514,级别 16,状态 1,行 3 Xml 数据类型在分布式查询中不受支持。远程对象 [srv].[DB].dbo.[table]' 具有 xml 列。

我不知道如何解决这个问题,因为我没有在 select 语句中显示此列。我虽然可以CAST,但是当列不在选择列表中时要转换什么?

我看到我不能使用 cast 的解决方法。所以我可能会错过一些东西。

有任何想法吗?

我的测试代码如下所示:

SELECT 
TA2.ID FROM [DB].[dbo].[table1] TA2
  INNER JOIN [linkedsrv].[DB].[dbo].[table1] PA ON (TA2.ID = PA.ID)

我需要更新 PA:

--UPDATE ALL ON PA

UPDATE XSRV
SET 
  XSRV.[Description] = SRV.[Description], 
  XSRV.[Code] = SRV.[Code], 
  XSRV.[Active] = SRV.[Active], 
  XSRV.[Expired] = SRV.[Expired], 
  XSRV.[SType] = SRV.[SType], 
  XSRV.SupportParameters = CAST(SRV.SupportParameters AS VARCHAR(MAX))
FROM 
  [PANI_TEST].dbo.[Services] AS SRV 
  INNER JOIN (SELECT X.ID, X.Code, X.[Description], X.Code, X.Active, X.Expired, 
      X.SType, CAST(X.XmlParams AS VARCHAR(MAX)) AS XmlParams, X.CreatedDate, X.CreatedBy, 
      X.ModifiedDate, X.ModifiedBy FROM [PANI_TEST].[dbo].[Services] AS X) AS XSRV ON 
    (SRV.ID = XSRV.ID) 
WHERE
  (SRV.[Description]     <> XSRV.[Description] ) OR
  (SRV.[Code]            <> XSRV.[Code]        ) OR
  (SRV.[Active]          <> XSRV.[Active]      ) OR
  (SRV.[Expired]         <> XSRV.[Expired]     ) OR
  (SRV.[SType]           <> XSRV.[SType]       ) OR 
  (CAST(SRV.XmlParams AS VARCHAR(MAX)) <> XSRV.XmlParams);

当然,上面的代码不起作用,因为我使用的是不可更新的派生表。我现在不知道如何更新。如果我使用没有派生表的简单 CAST,我仍然会出错。

sql-server sql-server-2012
  • 1 个回答
  • 1991 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-08 05:14:08 +0800 CST

TSQL 2012 删除了 INSTEAD OF 和 AFTER 触发器中的表?

  • 1

我的同事问我很简单,但对我来说很难的问题:

如果我的deleted表在触发器中有 10 条记录,我删除了其中的 8 条记录,那么在触发器的表中INSTEAD OF会有多少条记录?deletedAFTER

我认为它会是 10,但我不确定。

trigger sql-server-2012
  • 1 个回答
  • 64 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-07-07 07:45:54 +0800 CST

如何在转换为 XML 之前在 TSQL 中转义 XML 字符?

  • 6

我有XML 结构,它是我的存储过程的输入参数。它包含带有&的元素(在 XML 中转义)。当我将该元素提取到VARCHAR我收到&时,它不是有效的 XML 字符。在再次转换为 XML 之前,我需要对其进行转义。没有 怎么办REPLACE?

我有以下文字:param1=xyz&para2=dasdasdfdas&param3。它是查询字符串的一部分。我将其转换XML为 XML 结构的一部分并将其发送:

<zzz xmlns="http://example.com">
  <aaa>aaa</aaa>
  <bbb>param1=xyz&amp;para2=dasdasdfdas&amp;param3</bbb>
</zzz>

在存储过程中,我需要提取它。我这样做:

ISNULL(NULLIF(LTRIM(RTRIM(@XMLInput.value('declare default element namespace "http://example.com"; (zzz/bbb)[1]', 'NVARCHAR(250)'))), ''), '');

之后我的值包含普通文本(& -s 没有转义 - &)。

经过一些处理后,我需要将该字符串放入其他 XML 中。我做:

CAST( ... AS XML);

因为& -s 没有被转义,所以我得到了错误。

sql-server t-sql
  • 2 个回答
  • 21214 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-06-16 06:14:58 +0800 CST

如何在 SQL Server 2012 中编写 XML Schema 集合脚本?

  • 3

我需要在我的数据库中制作 XML 模式集合的脚本,然后将每个 xml 作为字符串插入到表字段中。

我需要这样做以在重新生成后将当前模式集合与新模式集合进行比较。

我不知道从哪里开始!

sql-server sql-server-2012
  • 1 个回答
  • 1667 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-03-25 02:22:45 +0800 CST

有没有办法使用变量作为模式来验证 XML?

  • 2

有没有办法XSD schema在构造中声明为变量:DECLARE @xml XML(Books)?

我需要快速验证XML使用XSD声明为变量的模式。我想没有办法,但我不得不问。

如果有人可以提出一些解决方法,那也将非常有帮助。

sql-server sql-server-2012
  • 2 个回答
  • 2300 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-03-19 09:24:00 +0800 CST

如何在存储过程完成之前获得响应?

  • 9

我需要在存储过程完成之前返回部分结果(作为简单的选择)。

有可能这样做吗?

如果是,该怎么做?

如果没有,有什么解决方法吗?

编辑:我有几个部分的程序。在第一部分中,我计算了几个字符串。我稍后会在过程中使用它们来进行额外的操作。问题是调用者尽快需要字符串。所以我需要计算该字符串并将其传回(以某种方式,例如从选择中),然后继续工作。调用者更快地获得其有价值的字符串。

调用者是一个 Web 服务。

t-sql sql-server-2012
  • 4 个回答
  • 3521 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-02-10 00:42:22 +0800 CST

SQL 2012 CLR 错误:“在进入...之前处于活动状态的上下文事务”?

  • 4

我遇到了奇怪的错误SQL 2012and CLR:

在进入用户定义的例程、触发器或聚合“我的例程”之前处于活动状态的上下文事务已在其中结束,这是不允许的。更改应用程序逻辑以强制执行严格的事务嵌套。

我不知道可能是什么问题。谁能给我一些搜索的方向?

一般来说,我有 SQL 存储过程,在UPDATE子句中我调用scalar CLR function. 该函数获取 2 个xml字符串:一个用于验证xml,另一个用于xsd验证。该函数在查询中被多次调用。

编辑:

错误信息:

错误号:3991

错误严重性:16

错误状态:1

错误过程:sproc_XXX

错误行:297

错误消息:在进入用户定义的例程、触发器或聚合“CLR_XXX_Xml”之前处于活动状态的上下文事务已在其中结束,这是不允许的。更改应用程序逻辑以强制执行严格的事务嵌套。

编辑2:

我发现了问题。当我们使用CLRvalidateXML时,我们将第一个参数设置为XSD名称。然后在我们从 SQL Server中CLR提取模式。XSD在我们的例子中,我们有空字符串作为XSD名称,但即使我们有try / catch错误也向上传递到 SQL Server 存储过程。

我们的函数返回0 / 1,因此必须使用错误代码更新带有 0 的记录。

但在这种情况下,我们在 SQL 中收到异常。

我的代码是:

用于更新的 SQL

UPDATE FR
SET ErrorCode = 'OUR ERROR CODE'
FROM dbo.DataTable FR
INNER JOIN dbo.TempTable FRN ON (FRN.SessionGUID = @sSessionGUID)
    AND (FRN.IDLog = FR.IDLog)
    AND (FRN.UniqueID = FR.UniqueID)
    AND (
        (FRN.Template LIKE '%##%')
        OR (PANI_Core.dbo.funCLRs_CheckXML('schRPT_' + @sSchema + '_Peliminary', 
     FRN.Template) <> 1)
        OR (NULLIF(FRN.Template, '') IS NULL)
        OR (
            (TRY_CONVERT(DATE, FRN.ExpirationDate) IS NULL)
            AND (NULLIF(FRN.ExpirationDate, '') IS NOT NULL)
            )
        OR (
            (TRY_CONVERT(VARCHAR(35), FRN.EGN) IS NULL)
            AND (NULLIF(FRN.EGN, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.EGN, '') IS NULL)
        OR (
            (TRY_CONVERT(MONEY, FRN.Amount) IS NULL)
            AND (NULLIF(FRN.Amount, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.Amount, '') IS NULL)
        OR (
            (TRY_CONVERT(VARCHAR(32), FRN.UniqueClientID) IS NULL)
            AND (NULLIF(FRN.UniqueCID, '') IS NOT NULL)
            )
        OR (NULLIF(FRN.UniqueCID, '') IS NULL)
        )
WHERE (FR.IDLog = @IDLog)
    AND (FR.ErrorCode IS NULL);

CLR 代码:

public static SqlBoolean funCLRs_CheckXml(SqlString XsdSchemaString, SqlString ValueString)
{
    XmlDocument asset1 = new XmlDocument();
    XmlSchema schema1 = new XmlSchema();
    System.Text.StringBuilder o = new System.Text.StringBuilder();
    using (SqlConnection sqlLocalConn = new SqlConnection("context connection=true;"))
    {
        try
        {
            if (XsdSchemaString.ToString().Length == 0)
            {
                try
                {
                    asset1.LoadXml(ValueString.ToString());
                    asset1 = null;
                    return new SqlBoolean(true);
                }
                catch (Exception ex)
                {
                    return new SqlBoolean(false);
                }
            }
            else
            {
                sqlLocalConn.Open();

                SqlCommand cmd = new SqlCommand("SELECT XML_SCHEMA_NAMESPACE (N'dbo', N'" + XsdSchemaString.ToString() + "')", sqlLocalConn);
                cmd.CommandTimeout = 240;

                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read())
                {
                    SqlXml xmlData = reader.GetSqlXml(0);
                    using (XmlReader xmlReader = xmlData.CreateReader())
                    {
                        schema1 = XmlSchema.Read(xmlReader, ValidateSchema);
                    }

                    asset1.Schemas.Add(schema1);

                    XDocument oDoc = new XDocument();
                    oDoc = XDocument.Parse(ValueString.ToString());
                    oDoc.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove();

                    asset1.LoadXml(oDoc.FirstNode.ToString());
                    oDoc = null;

                    asset1.Validate((o1, e) =>
                    {
                        if (e.Severity == XmlSeverityType.Error)
                        {
                            o.AppendLine("Error: " + e.Message);
                        }
                    });

                    if (asset1.SchemaInfo.Validity == XmlSchemaValidity.Valid)
                    {
                        asset1 = null;
                        return new SqlBoolean(true);
                    }
                    else
                    {
                        asset1 = null;
                        return new SqlBoolean(false);
                    }
                }
                else
                {
                    asset1 = null;
                    return new SqlBoolean(false);
                }
            }
        }
        catch (Exception ex)
        {
            return new SqlBoolean(false);
        }
        finally
        {
            schema1 = null;
            asset1 = null;
            o = null;
        }
    }
}
transaction sql-server-2012
  • 1 个回答
  • 3345 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-01-10 09:11:50 +0800 CST

如何从性能的角度更好地使用 CLR 函数(在每个数据库中重复或具有通用功能)?

  • 7

我问了一个关于XML使用XSD schemainside验证的问题SQL Server 2012(见链接)。我了解(正如我所怀疑的那样)我需要使用CLR Function. 该函数将获取XSD schema text并且XML text将进行验证。

我将有 1 个配置数据库和许多安装数据库。从这个角度来看,我想知道在哪里创建该功能 - 在配置数据库中还是在每个安装数据库中?

从支持的角度来看,最好只有一个 CLR 函数。

t-sql sql-server-2012
  • 1 个回答
  • 1507 Views
Martin Hope
Bogdan Bogdanov
Asked: 2016-01-05 02:40:57 +0800 CST

在 SQL Server 2012 中使用 TSQL 函数内部的 XSD 验证 XML?

  • 5

我需要在 TSQL 中使用 XSD 验证 XML。为了使这项任务半自动化,我需要在 TSQL 函数中执行此操作。

为了进行验证,我必须将值设置为 XML,如果它无效,我将收到错误消息。

我的问题是我无法使用 TSQL 函数内部TRY / CATCH。这是正确的方法吗?是否有可能这样做?

t-sql sql-server-2012
  • 1 个回答
  • 974 Views
Martin Hope
Bogdan Bogdanov
Asked: 2015-07-27 03:32:09 +0800 CST

TSQL 函数中的奇怪行为(具有 int 变量或 NULL 的参数表现不同)?

  • 1

我今天在使用 TSQL 函数时遇到了一个非常奇怪的问题。

该函数有几个参数(int 和 bit)。其中一个 (int) 被设置为 NULL 值。

在 params 函数中调用带有 NULL 的函数时返回 ERROR(错误是正常的,因为我尝试转换'%%'为int值)。当使用参数 @p1 调用该函数时,NULL该函数正在工作。

有人可以向我解释为什么它会这样吗?

我们正在使用:

Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 
    Oct 19 2012 13:38:57 
    Copyright (c) Microsoft Corporation
    Business Intelligence Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

我的代码是: 导致错误的代码:

((@p IS NOT NULL) AND (CONS.IDp = @p)) OR
((@p IS NULL) AND (UFCFD.IDUser IS NOT NULL) AND
 (CONS.IDp = CAST(UFCFD.Value1 AS INT))

备注:我编辑“导致错误”部分是因为我的同事进行了保护检查。我删除了那部分以显示函数的原始状态(来源是:(CONS.IDp = CASE WHEN ISNUMERIC(UFCFD.Value1) = 1 THEN CAST(UFCFD.Value1 AS INT) ELSE NULL END))

导致错误的调用:

SELECT * FROM dbo.myFunc(NULL); 

有效的电话:

DECLARE @p INT = NULL;
SELECT * FROM dbo.myFunc(@p); 

PS 如果问题不清楚,请通过评论告诉我。

编辑2:

这是函数的全文:

CREATE FUNCTION dbo.myFunc
(   
    @IDUser INT, 
    @p INT,
    @IDGrid INT,
    @IsWithLead BIT,
    @IDLeadValueResource INT,
    @IDLanguage INT,
    @IsAllPresent BIT,
    @IDAllValueResource INT
)
RETURNS TABLE 
AS
RETURN 
(
    SELECT
        -99999999 AS ID,
        dbo.funs_GetResourceText(@IDLanguage,@IDAllValueResource) AS [Text],
        -99999999 AS Sort
    WHERE (@IsAllPresent = 1)

    UNION ALL

    SELECT
        0 AS ID,
        dbo.funs_GetResourceText(@IDLanguage,@IDLeadValueResource) AS [Text],
        0 AS Sort
    WHERE (@IsWithLead = 1)

    UNION ALL

    SELECT 
        CONS.IDConsumerType AS ID,
        CASE
            WHEN @IDLanguage = 40001 THEN CONS.ConsumerType_Name_en  
            WHEN @IDLanguage = 40002 THEN CONS.ConsumerType_Name_it 
            WHEN @IDLanguage = 40003 THEN CONS.ConsumerType_Name_de 
            WHEN @IDLanguage = 40004 THEN CONS.ConsumerType_Name_fr 
            ELSE CONS.ConsumerType_Name_en END AS [Text],
        ROW_NUMBER() OVER(ORDER BY CONS.SegmentOrder ASC) AS Sort
    FROM 
        dbo.V_ConsumerTypes AS CONS
        LEFT JOIN dbo.Grids GRD ON (GRD.ID = @IDGrid)
        LEFT JOIN dbo.CONFieldCollection_FieldDefinition FCFD ON
            (FCFD.IDFieldCollection = GRD.IDGridFieldCollection) AND
            (FCFD.FieldName LIKE '%IDp%')
        LEFT JOIN dbo.CONUser_FieldCollection_FieldDefinition UFCFD ON
            (UFCFD.IDFieldCollection = GRD.IDGridFieldCollection) AND
            (UFCFD.IDUser = @IDUser) AND
            (UFCFD.IDFieldCollections_FieldDefinitions = FCFD.ID) 
    WHERE
        ((@p IS NOT NULL) AND (CONS.IDp = @p)) OR
        ((@p IS NULL) AND (UFCFD.IDUser IS NOT NULL) AND
         (CONS.IDp = CAST(UFCFD.Value1 AS INT))
)

有效的电话是:

DECLARE @IDUser INT = -100;
DECLARE @p INT = NULL;
DECLARE @IDGrid INT = 17;
DECLARE @IsWithLead BIT = 0;
DECLARE @IDLeadValueResource INT = 0;
DECLARE @IDLanguage INT = 40002;
DECLARE @IsAllPresent BIT = 1
DECLARE @IDAllValueResource INT = -177;

DECLARE @dt DATETIME = GetDate();
SELECT * FROM dbo.fun_ClROME_MdFillComboConsumerTypes(@IDUser, @p, @IDGrid, @IsWithLead, @IDLeadValueResource,
    @IDLanguage, @IsAllPresent, @IDAllValueResource)
ORDER BY Sort

如果我们使用NULL而不是@p然后我收到错误,因为我尝试转换'%%'为int- 这是正确的。

问题是显然函数的行为不同,这是一个大问题。

t-sql sql-server-2012
  • 1 个回答
  • 1044 Views
Martin Hope
Bogdan Bogdanov
Asked: 2015-06-26 23:35:07 +0800 CST

为什么我的数据库镜像在将文件组设置从 RESTRICTED_USER 更改为 MULTI_USER 后崩溃?

  • 9

我的环境如下: VMWare 5.5 vitalized server MS Windows Server 2008R2 Enterprise domain and SQL Server 2008 R2 Enterprise。使用光纤通道连接的集中存储。

我的SQL Server DB. 我有 2 个file groups:一个是实时数据 (FG1),第二个是历史数据 (HDG)。

第二个文件组是read-only. 每个月我都会在分区中移动 - 我将新数据(来自上个月)添加到历史数据中。这个过程是自动的。

我们将数据库移至新服务器。最初,我不得不手动完成这个过程。在此操作期间,我的镜像发生故障(在操作 3 之后 - 请参阅下面的流程)并出现以下错误:

在主服务器上:

日志中的第 0 行:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid84

Message
Setting database option MULTI_USER to ON for database MYDB.

日志中的第 1 行:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid18s

Message
Error: 1453, Severity: 16, State: 1.

日志中的第 2 行:

Date        15.6.2015 20:54:11
Log     SQL Server (Current - 16.6.2015 07:55:00)

Source      spid18s

Message
'TCP://10.201.27.154:5022', the remote mirroring partner for database 'MYDB', encountered error 823, status 3, severity 24. Database mirroring has been suspended.  Resolve the error on the remote server and resume mirroring, or remove mirroring and re-establish the mirror server instance.

备注:我在旧服务器上多次自动执行此操作,但从未遇到过此类错误。

在镜像服务器上:

日志中的第 1 行:

Date        15.6.2015 20:54:11
Log     SQL Server (Archive #3 - 15.6.2015 21:33:00)

Source      spid17s

Message
Error: 823, Severity: 24, State: 3.

日志中的第 2 行:

Date        15.6.2015 20:54:11
Log     SQL Server (Archive #3 - 15.6.2015 21:33:00)

Source      spid17s

Message
The operating system returned error 5(Access is denied.) to SQL Server during a write at offset 0000000000000000 in file 'e:\Databases\MYDB_HISTRICAL.ndf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

我的过程如下:

1.我对数据库进行了多次备份(完整备份、文件组备份和 TLog 备份)。

2.我将 DB 设置为RESTRICTED_USER(允许通过脚本删除历史文件组标志的只读)。

2a. 我删除READ-ONLY了我的历史文件组的标志。

3.我把DB设置MULTI_USER为允许我们的软件正常运行。

4.我更新分区以便将数据移动到历史文件组。

5.我重复步骤2、2a和3,这样我就可以再次将历史文件组设置为只读。

6.我再次进行备份。

有谁知道我为什么会收到该错误?

编辑:我们在程序的不同阶段收到同样的问题。这是镜像崩溃的唯一情况,所以我想问题出在程序内部,但我不明白为什么!

sql-server partitioning
  • 1 个回答
  • 1091 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-11-11 06:52:25 +0800 CST

如何从文件组备份中正确恢复数据库?

  • 2

在尝试从一系列文件组备份中恢复 SQL Server 数据库时,我遇到了非常(从我的角度来看)奇怪的错误。

这是我的正确配置:

我有包含 2 个文件、2 个文件组和 1 个日志文件的数据库。
第一组(称为 PRIMARY 不是只读的并且包含我当前的数据)。
第二个是(称为 HISTORICAL)是只读的。

我也有分区。

由于空间不足,我做了以下内容:

  1. 经过一些服务操作(将数据从 PRIMARY 移动到 HISTORICAL FG)后,我进行了完整的数据库备份(每个月)。
  2. 之后对两个组进行完整备份,然后我进行日志备份。
  3. 我每晚都进行 PRIMARY FG 完整备份。
  4. 我每小时进行 PRIMARY FG 差异备份。
  5. 我每 15 分钟做一次 t-log 备份。

我的策略是尽量减少备份所需的空间。

万一失败,我将从月初恢复完整备份。之后我将恢复 HISTORICAL 备份(每个月只有一个)。之后,我将从所需时间恢复完整的 PRIMARY FG 备份(我不确定是否必须在 FULL DB 备份后恢复 PRIMARY FG 备份)。作为最后一步,我将恢复 t-log 备份并返回处于运行状态的数据库(如果需要)。

我过去做过那个手术。现在我收到错误消息,指出我尝试恢复的 LSN 太新了。为什么会这样?

sql-server restore
  • 1 个回答
  • 202 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-10-24 01:06:07 +0800 CST

检查数据库文件的物理碎片

  • 2

我在 Internet 上进行了搜索,但没有找到明确的解释说明何时应该尝试对位于 SAN 上的数据库的物理数据库文件进行碎片整理。我知道一些 SAN 内部有一些工具和程序可以处理这个问题,但也有一些 SAN 缺乏这些功能。

我的问题有 3 个部分:

  • 如何检查数据库文件的物理碎片?
  • 如果文件位于 SAN 上,是否有必要这样做?
  • 是否有必要创建更大的物理数据库文件以避免碎片?

我们使用租用的虚拟服务器。数据库正在增长,我们遇到了一些奇怪的问题。我想确保碎片整理不是问题。我也只是一般好奇。

sql-server fragmentation
  • 1 个回答
  • 2856 Views
Martin Hope
Bogdan Bogdanov
Asked: 2014-10-23 06:08:32 +0800 CST

如何获取导致错误 3609 的语句?

  • 3

如何找出导致错误的语句Msg 3609, Level 16, State 1, Line 4 The transaction ended in the trigger. The batch has been aborted.?

代码看起来很简单:

-- 1. Check 1
IF (EXISTS (
... check ...
   ))
BEGIN
  RAISERROR('Does not allow 1', 16, 1);
  IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
  RETURN;
END;

-- 2. Check 2
IF (EXISTS (
... check ...
   ))
BEGIN
  RAISERROR('Does not allow 2', 16, 1);
  IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
  RETURN;
END;

我检查了事务是否存在,所以在引发错误后我一定看不到该错误。

编辑:

我同意你的看法@gbn。我知道中的操作TRIGGER是一笔交易。

问题是在我们的代码(由我和一位同事编写)中,有一种情况RAISERROR不会触发回滚。我在实践中看到了 - 触发器引发了错误,但插入了新数据。那里的语法是相反的 - firstROLLBACK然后RAISERROR。我发现切换位置可以解决问题(我不知道为什么它只能以这种方式工作)。

我决定玩一点@@TRANCOUNT。但是当我插入几个转录时,触发器开始给我 3609。删除@@TRANCOUNT并没有解决问题。因为我有ROLLBACK检查是否有未结交易 3609 对我来说很奇怪。还有另一个触发器,但即使我禁用它,我仍然会收到 3609。

sql-server sql-server-2008
  • 1 个回答
  • 7029 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve