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-160329

youcantryreachingme's questions

Martin Hope
youcantryreachingme
Asked: 2023-05-08 07:14:29 +0800 CST

为什么连续的 .bak 全量备份文件会变大?

  • 5

首先,这不是这个问题的重复。在那个问题中,这个人每次都在覆盖文件,解决方案是使用 INIT 或 NOINIT。

在我的例子中,我们为每个备份生成一个唯一的文件名——一个时间戳附加到文件名。

我们有一个代理作业,每晚为大约 20 个数据库运行完整备份。在大约一周的时间里,1 个数据库的大小似乎每晚都在显着增加。

我们运行第二个代理作业,每 15 分钟运行一次日志备份,但在晚上 11 点到凌晨 5 点之间停止运行。通常早上的第一件事是日志备份很大,然后它们的大小变小,直到人们开始工作,然后它们的大小各不相同。

所有这些多年来一直没有问题。

20 个数据库中只有一个显示此问题 - 每晚的完整备份都比前一晚大得多。

日志文件备份适用于该数据库和所有其他数据库。

我们有一个包含三个副本的可用性组。两个被设置为相互故障转移,第三个副本是只读的,用于繁重的查询、数据提取和报告。AG 控制台在所有服务器的页面下方一直显示绿色复选标记。

有问题的数据库是 20 个数据库中最大的一个。正常的完整备份大约是 25GB。它慢慢增加如下:33、35、36、41、47、54、64、73 GB。

相比之下,在此问题之前的所有 14 个备份中,文件大小相当稳定,约为 25GB。

我刚刚暂停了所有数据库的所有日志备份,并对受影响的数据库进行了完整备份,最后一次完整备份是 76GB。

sql-server-2016
  • 1 个回答
  • 37 Views
Martin Hope
youcantryreachingme
Asked: 2021-04-26 15:31:20 +0800 CST

存储过程出错时,为什么要提交部分事务?

  • 8

我有一个存储过程,它首先声明一些变量,然后包含begin tran;在此之后,它对提供的参数执行一些验证(并在每次提供的参数验证失败时增加错误计数)。如果没有错误计数,则继续执行 7 次插入。在此之后,它有commit tran;

最近我在列表中添加了第 8 个插入。隐式类型转换意味着如果插入某些插入的数据将被截断。这向 SSMS 屏幕抛出了一个错误,但我发现前 7 个插入已提交,而第 8 个显然没有完成。

我很感激我可以包含一个try ... catch块来处理错误,但是如果一个显式begin tran;不能使整个工作块自治到commit,那么有什么意义呢?我错过了什么?

我知道我也许可以将我的程序调用包含在该级别的事务中 - 但是有人可以解释发生了什么以及为什么begin tran当包含在程序主体中时似乎不受尊重?如果调用该过程开始一个隐式事务,那么 proc 中的错误步骤是否不应该回滚由 proc 影响的所有更改 - 即使没有明确包括begin tran在 proc 主体中?

sql-server stored-procedures
  • 2 个回答
  • 2107 Views
Martin Hope
youcantryreachingme
Asked: 2020-09-07 16:44:01 +0800 CST

在子查询中生成随机行顺序

  • 0

我知道这里(和这里)的其他答案说按newid(). 但是,如果我top 1在子查询中进行选择 - 以便在外部查询中为每行生成一个随机选择 - 每次使用newid()都会产生相同的结果。

那是:

select *,
    (select top 1 [value] from lookupTable where [code] = 'TEST' order by newid())
from myTable

lookupTable.value...在从 . 返回的每一行上产生相同的值myTable。

我正在尝试从中选择一个随机值lookupTable。该表只有几行。在现实世界中,我想update myTable set someColumn = ...一个随机lookupTable.value值,以便为每一行myTable设置一个随机值,而不是生成一个随机值并将其分配给所有行。

sql-server sql-server-2016
  • 1 个回答
  • 793 Views
Martin Hope
youcantryreachingme
Asked: 2020-05-08 21:26:04 +0800 CST

外部查询是 UNION 一部分的 JSON 路径的子查询导致字符串而不是 JSON

  • 1

请耐心等待 - 示例代码已经发生了一些事情,我将尽我所能在下面解释它。

with ENTITIES as (
select [name] as entityName from (values ('A'), ('B'), ('C')) X([name])
),
PROPERTIES as (
select [propName] as entityName, [propValue] as propertyValue from (values ('A','1'),('A','2'),('B','3'),('UNIVERSAL','999')) Y([propName], [propValue])
),
SUBPROPERTIES as (
select [propValue] as propertyValue, [subPropValue] as subPropertyValue from (values ('1','x'),('1','y'),('2','z'),('999','xyz')) Y([propValue], [subPropValue])
)
--select * from ENTITIES
--select * from PROPERTIES

select (

    select entityName as 'entityName',
    (
        select * from 
            (
                select propertyValue as 'propertyValue',
                (
                    select subPropertyValue from SUBPROPERTIES where SUBPROPERTIES.propertyValue = PROPERTIES.propertyValue
                    FOR JSON PATH, INCLUDE_NULL_VALUES
                ) Y
                from PROPERTIES where PROPERTIES.entityName = ENTITIES.entityName 

-- For testing, comment out from here -------------------------------------------------------------------------------------
                UNION
    
                select propertyValue as 'propertyValue',
                (
                    select subPropertyValue from SUBPROPERTIES where SUBPROPERTIES.propertyValue = PROPERTIES.propertyValue
                    FOR JSON PATH, INCLUDE_NULL_VALUES
                ) Y
                from PROPERTIES where PROPERTIES.entityName = 'UNIVERSAL' 
-- For testing, stop commenting out here ----------------------------------------------------------------------------------

            ) X
        FOR JSON PATH, INCLUDE_NULL_VALUES
    ) as entityProperties
    
    from ENTITIES
    FOR JSON PATH, INCLUDE_NULL_VALUES

) jsondata

我设置了 3 个 CTE - 代表 3 个相互链接的表。一个实体记录(如“A”)可以有多个属性(如“1”和“2”),每个属性记录可以有多个子属性(如“1”有子属性“x”和“y”)。

现在主查询只是尝试构建一个 JSON 对象,该对象将返回所有实体及其所有链接的属性和链接的子属性。

所以第一个选择列只给你 entityName - 一个顶级查询。

下一列是子查询,用于获取与给定 ENTITIES 记录相关的所有 PROPERTIES 值。您会看到它返回带有别名“propertyValue”的东西——当然这将是一组值——链接到当前实体记录的每个 PROPERTIES 记录的一个值。

子查询有第二列,它是另一个子查询 - 到 SUBPROPERTIES 表 - 类似于上面。

现在问题来了——在这个中间级别(报告属性),我实际上想从 UNION 获取数据。

(在这个例子中,联合中的第二个查询是查询同一个源表——所以我可以通过改变 WHERE 子句来避免联合or PROPERTIES.entityName = 'UNIVERSAL'——但在现实世界中,我从两个不同的表中获取数据,所以我想与 UNION 聚合)。

我知道,当FOR XML PATH与 UNION 一起使用时,您需要将所有 UNION-ed SELECT 包装在括号中并给它一个别名(在本例中为 X),然后从中选择 - 我已经用select * from. (忽略这select *是不好的做法 - 这不是重点)。

这种对 UNION 的方法很好用——只要 UNION-ed 的查询不包含子查询——但正如您在此处看到的,我有子查询。

所以 - 看看我试图说明什么,如果您注释掉 UNION(和第二个选择),您将根据下图获得结构良好的 JSON。我已经强调了在结构化 JSON 中正确显示 SUBPROPERTIES 的位置。

在此处输入图像描述

但是,当我添加 UNION 时,这些子查询返回字符串,而不是 JSON,如下图所示。我已经突出显示了字符串的位置。

在此处输入图像描述

我尝试了各种方法来添加 JSON_QUERY 函数(在某些情况下建议将字符串解析为 JSON),但是 a) 未能解决问题,并且 b) 没有实际需要完全相同的数据时存在不是联合。

我也尝试过各种方法来select * from处理最低级别的子查询 - 无济于事。

提前致谢。

t-sql sql-server-2016
  • 1 个回答
  • 3215 Views
Martin Hope
youcantryreachingme
Asked: 2019-09-19 21:32:12 +0800 CST

辅助副本上的可用性组数据库是否由 AG 自动设置为只读?

  • 2

我已经阅读了有关只读路由的 MS 文档,但我不是在谈论这个。

目前,如果我UPDATE对位于辅助副本上且属于可用性组的数据库执行操作,我会收到一条消息:

Msg 3906, Level 16, State 2, Line 6
Failed to update database "dbName" because the database is read-only.

我的问题是,由于数据库是 AG 的一部分并且目前在辅助节点上,这种配置是否是默认建立的(并且是不可避免的)?

一些有趣的额外内容:

以下 SQL 在该辅助节点上运行,显示 I haveUPDATE以及ALTER对该数据库的更多权限:

SELECT * 
FROM fn_my_permissions(null, 'DATABASE')   
ORDER BY subentity_name, permission_name;

以下 SQL 明确显示我有权访问UPDATE该数据库中的表:

SELECT * 
FROM fn_my_permissions('dbName.dbo.tblName', 'OBJECT')   
ORDER BY subentity_name, permission_name ;

尽管如此,我实际上被阻止更新该表。这意味着:

  • 的输出fn_my_permissions不严格正确
  • 数据库“只读”设置覆盖单个权限

我了解游戏中的设置是通过以下方式配置的:

ALTER DATABASE dbName SET READ_ONLY

和

ALTER DATABASE dbName SET READ_WRITE WITH NO_WAIT

该问题的主要原因是要了解“只读”配置是 DBA/设计人员在 AG 的设计和部署期间的责任,还是使用 AG 的预期(和保证?)功能。

availability-groups sql-server-2016
  • 2 个回答
  • 1670 Views
Martin Hope
youcantryreachingme
Asked: 2019-05-28 22:52:26 +0800 CST

为 JSON 正确转义字符串中的字符

  • 2

在下面的示例中,如何转义 @data 变量中的双引号字符?

declare @data nvarchar(max) = N'"TEST"';
declare @jsonFragment nvarchar(max);
declare @id int = 999;

set @jsonFragment = ',"' + cast(@id as nvarchar(16)) + '":"' + @data + '"';

select @jsonFragment;

结果是:

 ,"999":""TEST""

我需要它是:

 ,"999":"\"TEST\""

据我了解,选择for json path需要我定义一个静态键名 - 但可以看出,我有一个动态定义键名的场景。

在我的实际用例中,此字符串构造发生在stuff语句中,它本身是使用 CTE 的较大列定义的一部分select- 这意味着很难创建动态 sql 语句以使用sp_executeSQL.

t-sql sql-server-2016
  • 1 个回答
  • 5082 Views
Martin Hope
youcantryreachingme
Asked: 2019-05-15 20:19:29 +0800 CST

为什么 CASE 语句中的 JSON_QUERY 无法删除转义字符?

  • 6

如果在语句中应用该函数,则似乎json_query无法删除双引号字符 (") 的转义字符。case

下面的示例代码。

declare @data nvarchar(max);
declare @debug int = 0;

set @data = '{"id":10}';

set @debug = 0;
select
    isjson(@data) as 'validateData',
    @data as 'unprocessedSourceData',
    json_query(@data) as 'processedSourceData',
    case when @debug = 1 then json_query(@data) else null end as 'conditionallyProcessedSourceData'
    for json path, without_array_wrapper ;

set @debug = 1;
select
    isjson(@data) as 'validateData',
    @data as 'unprocessedSourceData',
    json_query(@data) as 'processedSourceData',
    case when @debug = 1 then json_query(@data) else null end as 'conditionallyProcessedSourceData'
    for json path, without_array_wrapper ;

第一个查询的结果:

{"validateData":1,"unprocessedSourceData":"{\"id\":10}","processedSourceData":{"id":10}}

第二个查询的结果:

{"validateData":1,"unprocessedSourceData":"{\"id\":10}","processedSourceData":{"id":10},"conditionallyProcessedSourceData":"{\"id\":10}"}

注意最后的转义字符:“ {\"id\":10}”

1)为什么会这样?

2)我如何重新处理这个查询,以便如果@debug = 1元素conditionallyProcessedSourceData包含有效的 JSON,并且如果@debug = 0元素是null?

sql-server t-sql
  • 1 个回答
  • 1968 Views
Martin Hope
youcantryreachingme
Asked: 2019-05-02 22:42:09 +0800 CST

如何用多行数据替换字符串的多个部分?

  • 3
  • 这是一个小提琴来展示我所追求的。

给定一个包含两列的表 - 一个整数 ID 和一个基于文本的字符串 - 我想从一个字符串值开始,该字符串值对包含在花括号中的任意数量的整数进行编码,并与任何其他有效的文本字符混合。

例子:'{1} / {9} ... {12}'

使用单个SELECT语句,我想返回一个字符串,其中所有整数(及其包装括号)都已替换为从我的表中派生的值;具体来说,具有与源字符串中找到的数字相匹配的 ID 的行的文本值......以及大括号外的任何字符保持不变。

这是一个无法完成任务的示例:

select
  replace('{13} {15}','{'+cast(id as varchar)+'}',isNull(display,''))
from testing;

testing这将在表中每行返回 1 行。对于idvalue = 13 的行,字符串的“{13}”部分已成功替换,但“{15}”部分未成功替换(反之亦然,在第 15 行)。

我想创建一个循环遍历所有testing行并反复尝试替换的函数将解决问题。尽管如此,直接的 SQL 语句将比循环更可取。

示例数据

+----+-------------------+
| id |  display          |
+----+-------------------+
|  1 |  Apple            |
|  2 |  Banana           |
|  3 |  Celery           |
|  4 |  Dragonfruit      |
|  5 |  Eggplant         |
|  6 |  Fenugreek        |
|  7 |  Gourd            |
|  8 |  Honeydew         |
|  9 |  Iceberg Lettuce  |
| 10 |  Jackfruit        |
| 11 |  Kale             |
| 12 |  Lemon            |
| 13 |  Mandarin         |
| 14 |  Nectarine        |
| 15 |  Olive            |
+----+-------------------+

示例用例

select replace('{1} {3}',null,null) 
-- Returns 'Apple Celery'

select replace('{3},{4},{5}',null,null); 
-- Returns 'Celery,Dragonfruit,Eggplant'

select replace('{1} / {9} ... {12}',null,null); 
-- Returns 'Apple / Iceberg Lettuce ... Lemon'

显然,replace关键字不起作用。

PS。如果解决方案需要更改字符串的格式以促进这一点,那么这是一种选择。

例如:('#1 / #9 ... #12'与前面的示例相关)

在这种格式中,也许我们可以将字符串分解为一个行集,基于#,取left字符直到我们找到一个非数字,根据取的数字join到表中,用表的值testing替换#和数字,然后单独替换所有这些将标记修改回单个字符串?testingdisplaystufffor xml path

我正在使用不支持的 SQL Server 2016 string_agg。也就是说,如果有使用 的解决方案string_agg,我仍然有兴趣查看它。

sql-server t-sql
  • 2 个回答
  • 6176 Views
Martin Hope
youcantryreachingme
Asked: 2019-04-17 22:41:07 +0800 CST

将 json 值更新为 null

  • 3

据我了解,如果您选择json_value或json_query指定 json 文档中不存在的键或对象,那么在严格模式下,您将收到错误消息。例如,这允许您确认是否在文档中指定了密钥。

如果文档中包含示例键值对,则:

"Test":null

...这将在严格模式下返回“NULL”。换句话说,您现在知道在文档中定义了键并且其值为空。

现在想象您的文档包含:

 "Test":"Some string"

你查询:

 select json_modify(@json, '$.Test', null);

这将返回一个缺少“Test”键的 json 字符串。

您如何正确地将键值设置为 null,而不是从 json 文档中删除它?

(上面的例子可能看起来很荒谬,但我可以想象在将 json 文档传递给下一个查询或系统之前将值设置为 null,并要求文档中存在您的“Test”键。)

sql-server t-sql
  • 1 个回答
  • 2558 Views
Martin Hope
youcantryreachingme
Asked: 2019-04-10 22:56:08 +0800 CST

必须引用数字 JSON 键吗?

  • 7

我注意到,当 TSQL JSON 字符串中的数字时,键值可能不被引用,但似乎关键组件必须始终被引用。

select 1, isjson(''), 'empty string' union
select 2, isjson('{}'), 'empty braces' union
select 3, isjson('{1:2}'), 'unquoted both, numerals both' union
select 4, isjson('{1:"2"}'), 'unquoted key, numerals both' union
select 5, isjson('{"1":2}'), 'unquoted value, numerals both' union
select 6, isjson('{"1":"2"}'), 'quoted both, numerals both' union
select 7, isjson('{a:b}'), 'unquoted both, alpha both' union
select 8, isjson('{a:"b"}'), 'unquoted key, alpha both' union
select 9, isjson('{"a":b}'), 'unquoted value, alpha both' union
select 10, isjson('{"a":"b"}'), 'quoted both, alpha both'
order by 1
;

结果:

1   0   empty string
2   1   empty braces
3   0   unquoted both, numerals both
4   0   unquoted key, numerals both
5   1   unquoted value, numerals both
6   1   quoted both, numerals both
7   0   unquoted both, alpha both
8   0   unquoted key, alpha both
9   0   unquoted value, alpha both
10  1   quoted both, alpha both

以上证明了这一点,但我的问题是:

  1. 一定要一直这样吗?(是否有可以覆盖此行为的配置?)
  2. 此行为是由 JSON 还是 SQL Server 指定的?
  3. 这个设计决定背后的理由是什么?
  4. 如果 SQL Server 自动将不带引号的数字转换为整数,是否会带来性能优势?
sql-server t-sql
  • 1 个回答
  • 7846 Views
Martin Hope
youcantryreachingme
Asked: 2019-02-21 14:52:41 +0800 CST

解释 OVER 子句

  • 7

我看到了一个简洁的 TSQL 语句,它有效地将字符串拆分为其组成字符,每行一个,用于评估ascii每个字符的值。

如果我正确、有效地读取查询,则使用 3 个 CTE 来准备一个包含 10,000 行的 1 列表,每列的值为“0”。

第四个 CTE 定义如下:

cteTally(n) AS(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) n 
    FROM E4
)

随后,将此 CTE 连接到一个表,该表包含一个包含感兴趣字符串的列,其中包含以下内容select:

SELECT n, SUBSTRING(LastName, n, 1), ASCII( SUBSTRING(LastName, n, 1))

即行号 n,然后是 LastName 中的第 n 个字符,然后是该字符的 ascii 值。

我的问题与over上述 CTE 中的条款有关。

本质上,它到底在做什么?

如果我们从 10,000 个相同的行中查询 row_number,为什么我们需要一个order by子句?为什么order by放入一个over子句而不是作为语句的order by子句select- 特别是因为该over子句甚至没有指定任何分区?(我认为这意味着row_number操作的窗口是完整的 10,000 行?)排序是什么意思select null?

sql-server t-sql
  • 2 个回答
  • 2334 Views
Martin Hope
youcantryreachingme
Asked: 2019-02-08 19:10:43 +0800 CST

是否可以在 SSMS 中单步执行使用变量的 TSQL?

  • 2

如果我将 TSQL 输入到 SSMS 查询编辑器中,我知道我可以通过突出显示一条语句并在键盘上按 F5 来“单步执行”语句(即一次执行一条语句)。

不过,默认情况下,该会话似乎没有打开的事务。每次执行都是提交的。

我可以编写我的 TSQL,使其以 or 开头BEGIN TRAN并以COMMITor结尾ROLLBACK——这样可以确保在逐步执行时,我可以选择退出更改。

但是我遇到的问题是当我声明变量时。考虑:

declare @flag bit = 0;

select case when @flag = 0 then 'off' when @flag = 1 then 'on' end as FlagCheck;

不管上面是否包含在事务中,如果我自己运行第一个语句,然后自己运行下一个语句,第二个语句将失败,因为变量尚未声明。

是否可以像这样单步执行代码并让 SSMS 理解前面语句(声明变量和赋值)的效果应该延续到下一步?(同样,即使包装在事务中,变量的这种持久化也会失败——即使数据更新的持久化取决于事务解析——提交或回滚)。

sql-server t-sql
  • 1 个回答
  • 161 Views
Martin Hope
youcantryreachingme
Asked: 2019-01-14 21:57:52 +0800 CST

sp_send_dbmail 返回值是什么?

  • 5

我有一封电子邮件失败,函数返回值为“101”,@@error 值为“0”(未添加任何行sysmail_allitems)。

我在哪里可以找到有关此函数的返回代码的文档?

显示我如何获得上述值的示例代码:

exec @result = msdb.dbo.sp_send_dbmail
    @profile_name = 'OBFUSCATED',  
    @recipients = @DL,  
    @subject = 'OBFUSCATED',
    @body = @emailBody,
    @body_format='html',
    @query = @reportQuery,
    @exclude_query_output = 1,
    @attach_query_result_as_file = 1,
    @query_attachment_filename = @filename,
    @query_result_separator = @temp,
    @query_result_header = 1,
    @mailitem_id = @mailitem_id
    ;

    set @temp = @@ERROR;
sql-server database-mail
  • 2 个回答
  • 5240 Views
Martin Hope
youcantryreachingme
Asked: 2019-01-02 19:52:40 +0800 CST

如何恢复到完整备份之前的最后一个日志备份和完整备份之间的时间点?

  • 0

想象一下以下时间轴:

  • T0 = 完全备份
  • T1 = 日志备份
  • T2 = 日志备份
  • T3 = 日志备份
  • T4 = 完全备份
  • T5 = 日志备份

以上这些都发生后,如果你还有所有的备份文件,你将如何恢复到T3和T4之间的时间点?

我的理解是T4的full backup应该会导致日志文件将T0和T4之间的事务标记为inactive,所以理论上事务日志可能不再包含T4之前时间的事务。特别是,T5 的日志备份将只包含 T4 之后的事务信息。这个对吗?

sql-server restore
  • 1 个回答
  • 49 Views
Martin Hope
youcantryreachingme
Asked: 2018-10-16 16:17:03 +0800 CST

每秒日志刷新率似乎很低

  • 0

我最近接管了一个包含大约 25 个数据库的系统的管理。使用 Redgate Monitor 绘制一些指标图表,我看到每天都有一个数据库显示日志刷新/秒的值,看起来像一个“正常”图表 - 全天的锯齿形线。

Redgate 解释了该指标:“当提交事务并将数据从日志缓存写入物理事务日志文件时,就会发生日志刷新。”

一切都很好——工作正在进行,数据在提交时被刷新到磁盘。

我的问题是——为什么所有其他数据库根本无法在 x 轴上方注册任何东西?

Redgate 还解释说:“每秒的日志刷新通常应该与每秒的事务数相关联。”

当我查看每秒事务时,很多数据库都显示锯齿形图表线 - 那么发生了什么,只有其中一个显示日志刷新活动?这是否意味着所有其他数据库都无法提交?

所有用户数据库都使用完整恢复模式。

(我还注意到,在凌晨 2 点到凌晨 5 点之间,几乎所有数据库的日志刷新都出现了巨大的峰值——仍在调查这些问题的原因)。

sql-server transaction-log
  • 2 个回答
  • 350 Views
Martin Hope
youcantryreachingme
Asked: 2018-10-10 17:16:39 +0800 CST

从另一个上下文调用时,过程在哪个上下文中运行?

  • 0

设想:

use databaseA;
go

exec databaseB.dbo.spProcedure();
go

该过程是针对 databaseA(调用它的上下文)还是针对 databaseB(它存在的上下文)执行的?

如果程序有

insert into myTable(example) values ('example');

... 如果两个数据库都有相同的表 myTable,哪个数据库将接收新记录?

sql-server stored-procedures
  • 1 个回答
  • 30 Views
Martin Hope
youcantryreachingme
Asked: 2018-10-09 14:54:28 +0800 CST

帮助理解“已用日志空间”指标

  • 0

下图来自一个监控工具。显示的指标是过去 7 天 SQL Server 2016 的“已用日志空间”。

我正在寻求帮助以了解这里发生的事情。

在此处输入图像描述

我所知道的是 IT 部门正在使用第 3 方工具 (Veeam) 定期“备份”。我被建议每晚执行一次完整备份,每 15 分钟执行一次日志备份(但我不确定这些是数据库文件的磁盘映像备份还是 Veeam 向 SQLServer 发出的执行备份的命令)。其中一个步骤包括 SQL Server 的“处理日志”,我相信其中一个步骤是截断日志。

我知道截断日志意味着将日志文件中可以重复使用的那些部分标记为不活动。目前,我理解(正确或错误)如果 SQL Server 知道日志文件部分已写入磁盘(即通过备份),则可能会重新使用它。

我在这张图表中看到的是

  1. 最左边的一个数据库的日志文件使用率异常高 - 忽略它。
  2. 每天增长然后每天清除每个日志文件(3 个驼峰)。
  3. 增长超过 3 天(周五、周六、周日),然后截断。

我在这里的解释是必须进行日志备份,否则使用率不会回落到接近零。

我怀疑日志备份每天只发生一次——尽管我认为这张图表不能证明这一点。例如,有可能在工作时间有更频繁的日志备份,但由于长时间运行的事务,此时不会发生截断。然而,在 Veeam 的夜间备份中,截断命令发出并成功。尽管存在这种可能性,但我仍然认为 Veeam 每天只执行一次日志备份的可能性更大。

这里的部分问题是 Veeam 对我来说有点像黑盒子——我不确定 IT 是如何配置它的。我也不清楚它是在拍摄硬盘(即数据库文件)的快照图像,还是指示SQLServer 执行备份。

我的目标是确保我们经常进行日志文件备份(并制定一个良好的频率)以支持基本上所有这些数据库的完整恢复模型。如果我确定目前我们进行日志备份的频率不超过每晚一次,那么我还需要确保如果我采取措施进行频繁的日志备份,我不会与 Veeam 竞争,以至于 Veeam 和任何计划任务在SQLServer 不会破坏彼此的日志链 - 任何有关如何检查和计划这些事情的建议将不胜感激。

sql-server backup
  • 1 个回答
  • 39 Views
Martin Hope
youcantryreachingme
Asked: 2018-09-17 20:35:17 +0800 CST

当应用程序连接到数据库时,如何访问用户的应用程序用户名?

  • 0

我想使用触发器和审计表来审计对 SQLServer 中表的更改。最终用户通过应用程序连接到数据库。如果我使用SYSTEM_USER获取最终用户的用户名,那么它会返回连接到数据库的应用程序的名称,而不是该应用程序的用户唯一登录名。

在这种情况下,捕获用户唯一应用程序登录名的标准方法是什么?

sql-server audit
  • 1 个回答
  • 602 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