小编Han*_*non的帖子

为什么对象在 oracle 数据库中无效。

我的数据库中有一些无效的视图和函数。

我不确定是什么更改导致这些对象无效,因为很多人都在使用同一个数据库。

如何查看导致视图无效的更改?

oracle view

4
推荐指数
1
解决办法
3万
查看次数

为什么在表值函数内调用标量函数比在 TVF 外调用要慢?

我正在编写一个表值函数,调用该函数所需的时间是直接运行代码的 10 倍。我将此追溯到对 TVF 内的多行标量函数的调用。从 TVF 内部调用时,对标量函数的调用过慢。标量函数接受 3 个 int 参数并返回单个 int 结果。

什么会导致它在 TVF 中变慢?

首先,TVF 基本上是一种数据透视表,只返回一行,有 13 列。

标量函数是一个多行标量,它在两个表中的一个中查找一组匹配的键(即输入是 columnA,输出是 columnB,其中 input = columnA 和 active)。使用稍微更改的 where 子句再次搜索表 1,然后是表 2,最后是表 1。

用法最初是一个带有连接子句的 cte 查询:

  With cte as ( select count(*) over (partition by c.c1) recs,
                       c.setId, c.c1, c.c2, n.name
                From tbl c
                     Inner join tbl n on n.id = schma.scal(c.c1, c.c2, c.c3)
                Where c.setId=@setId and c.endDt is null
   )
Run Code Online (Sandbox Code Playgroud)

这个 cte 最初被调用了 11 次,从(大约一半的时间)返回到 3 行(使用像 c1=42 这样的 …

performance sql-server sql-server-2008-r2 functions

4
推荐指数
1
解决办法
1219
查看次数

psql:以批处理模式运行命令

考虑一个.sql包含一些选择和更新的文件。我想使用该psql实用程序从脚本运行此文件:

psql -h whatever.rds.amazonaws.com -U user dbname -f commands.sql
Run Code Online (Sandbox Code Playgroud)

问题是我得到了一个带有查询结果的交互式屏幕和一个(0 rows)(END),需要按下esc才能返回正常外壳。

我曾尝试使用--echo-all和/或--single-transaction遵循psql 手册,但没有成功。

如何sql在非交互模式下运行我的文件,只显示结果并退出脚本?

psql postgresql-9.3

4
推荐指数
1
解决办法
7176
查看次数

使用 sp_BlitzIndex - 诊断为“索引囤积者:沉迷于空值”

上下文:MS SQL Server 2012

在使用 Kendra Little 的强大工具 sp_BlitzIndex 时,许多表被诊断为“索引囤积者:沉迷于空值”。

我不是在寻找关于 NULL 及其位置的辩论。我知道在某些情况下 NULL 非常合适,甚至是必要的。这里的问题是 sp_BlitzIndex 提供的反馈,以及强制执行 not NULL 约束的值。

在 sp_BlitzIndex 被“诊断”为具有许多允许 NULL 的列的大多数表中,没有任何实际的 NULL 值。我们以编程方式不允许它们。我只是从未取消选中“允许空值”框以在数据库级别强制执行该约束。

强制执行此约束有什么好处,为什么它是她的脚本确定的问题之一?

谢谢!

null sql-server index-tuning sql-server-2012 sp-blitzindex

4
推荐指数
1
解决办法
1834
查看次数

SQL“标准”指南?

我目前正在学习 TSQL 并且正在学习这是可能的,我应该使用“标准”SQL 方言。我在哪里可以找到哪些命令是“标准”的,哪些是 TSQL?

sql-server t-sql sql-standard

4
推荐指数
1
解决办法
197
查看次数

sys.sp_reset_connection。为什么有很多?

这里有很多关于 DBA EXCHANGE 的问题。但他们都帮不了我。

我有两个问题:

1)使用sp_whoisactive,我发现了很多sys.sp_reset_connection;1(我知道它们是sp_reset_connections因为我使用了dbcc inputbuffer(SPID):

大量重置

这是“主服务器”,因此其他服务器( 3,4,7 )在这里不断请求某些数据库的信息(我看到的是,每个请求都是针对 MASTER 数据库的)。

数据库


2)他们为什么要花这么多时间?

看这里的一些答案,发现系统在等待CPU。但所有 CPU 都是空的。这怎么会是问题?

在幕后,SQL Server 使用 sp_reset_connection 逻辑来“重置”SQL Server 的连接状态,这比建立全新的连接更快。较旧的驱动程序将过程调用作为单独的 TDS 往返发送到 SQL Server。
较新的客户端驱动程序在下一个命令中添加了一个标志位,从而避免了额外的网络往返。

很好……但我还是不知道该怎么办。

这不会给我带来问题。我只想知道如何解决这个问题。

sql-server sql-server-2008-r2 connections

4
推荐指数
2
解决办法
4593
查看次数

在存储过程中生成数据库创建脚本

我希望自动擦除我们的测试环境,使其在每个冲刺结束时与生产保持一致。

就目前而言,这目前正在通过测试环境获取完整备份并使用移动和替换进行恢复来完成,但这占用了我们拥有的大部分空间。

目的是从头开始创建环境并仅填充所需的表。

我可以使用“右键单击 > 任务 > 生成脚本...”来创建数据库框架。

有没有办法从存储过程中创建该脚本,以便可以用于重新创建数据库

此外,我正在按原样处理这一点,但显然该脚本只会以其当前大小创建数据库,因此一旦生成脚本,就需要修改所有文件大小

为任何帮助干杯

sql-server stored-procedures restore sql-server-2012

4
推荐指数
1
解决办法
655
查看次数

确定针对表的查询的原始 IP 地址?

我有一个正在由在未知位置运行的服务更新的表。

我已经检查了所有通常与我的数据库服务器通信的服务器,但它们似乎都没有运行相关服务。

我正在尝试追踪此服务的运行位置,我想知道是否可以查看影响特定表的查询来自何处?

这可能吗?

sql-server sql-server-2012

4
推荐指数
1
解决办法
2087
查看次数

执行Sql语句并将结果发送到电子邮件

我必须每天执行 SQL 语句并将结果通过电子邮件发送给 dba。我配置了数据库电子邮件。

下面是查询:

 SELECT
        account.accountID,
        account.name
    FROM
        account
        LEFT OUTER JOIN accountfeaturesetting afs 
            ON afs.accountid = account.accountid 
                and afs.featureid = 'Schedules' 
                and afs.settingid = 'EditReasons'
    WHERE
        ISNULL(afs.Value, '0') = '1'
        AND NOT EXISTS
 (SELECT 1 FROM program 
WHERE program.AccountID = account.AccountID
 AND program.Active = 1 AND 
(program.ScheduleEditReasonFlags <> 0 OR
 program.ScheduleEditReasonFields <> 0))
        AND account.IsMaster = 0
Run Code Online (Sandbox Code Playgroud)

为此,我创建了具有 2 个步骤的 Sql 作业:

  1. 执行选择语句
  2. 发送结果:

    Use MSDB
        EXEC msdb.dbo.sp_send_dbmail
            @profile_name = 'abc',
            @recipients = 'recipients@company.com',
            @subject = 'queryresultset',
            @body='testmail', …
    Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-agent database-mail

4
推荐指数
2
解决办法
7万
查看次数

这个查询来自哪里?

我在 SQL 2017 上启用了查询存储,并且我在查询中看到频繁发生SELECT *在特定表上的查询。

我想缩小此请求的来源范围,看看我们是否可以找到比执行SELECT *.

当然,我有一个来自 Query Store 的查询 ID。我最近还要求我的开发人员在他们的连接字符串中包含应用程序名称,很多人都这样做了。

有没有办法(例如,可能使用 DMV)找出与此查询关联的应用程序名称?

query-store sql-server-2017

4
推荐指数
1
解决办法
467
查看次数