小编Pet*_*ier的帖子

最大用户连接数

在 SQL Server 2012 标准版中,我知道最大用户连接数是 32,767。如果我正朝着这个数字前进,作为 DBA 我应该怎么做?

目前有 30,000 个用户连接,这个数字预计还会增加。

在此处输入图片说明

sql-server max-connections sql-server-2012 connections

25
推荐指数
2
解决办法
6万
查看次数

为什么有 PostgreSQL Turtle?

我刚刚查看了PostgreSQL宣传页面,我发现了这件小艺术品:

在此处输入图片说明

它是“Turtle Style” PostgreSQL 标志。这是多少岁了,PostgreSQL 是否曾经正式使用乌龟而不是大象?这里有什么故事?

postgresql

17
推荐指数
2
解决办法
1314
查看次数

只读文件组中的列存储索引阻止 CheckDB

如果文件组包含列存储索引,则似乎设置文件组以read_only防止dbcc checkdb整个数据库。尝试运行checkdbcheckfilegroup对于数据库中的任何文件组,包括读写辅助文件和[PRIMARY])时,将返回以下错误...

Msg 8921, Level 16, State 1, Line 24
Check terminated. A failure was detected while collecting facts. 
Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Run Code Online (Sandbox Code Playgroud)

是否有支持在只读文件组中存储列存储数据的方法?还是在这种情况下我无法进行完整性检查?

再现

create database check_fg_ro
go
use check_fg_ro
go
exec sp_changedbowner 'sa';
go
alter database check_fg_ro add filegroup check_fg_ro_2;
alter database check_fg_ro
    add file (
         name='check_fg_ro_2'
        ,filename='C:\check_fg_ro_2.ndf'
    ) to filegroup check_fg_ro_2;
go
create table …
Run Code Online (Sandbox Code Playgroud)

sql-server filegroups columnstore dbcc-checkdb read-only-database

15
推荐指数
1
解决办法
412
查看次数

SQL 代理 powershell 上下文参考

在我的新工作中,我们在每台服务器上都有多个命名实例。例如

  • 服务器 1\开发
  • Server1\DevIntegrated
  • 服务器 1\QA

我在工作中有一个 SQL PowerShell 脚本,它调用操作系统,调用Foo.exe但需要传递命令行参数(连接字符串)。每个实例上都将存在一个 SQL 代理作业,带有 PowerShell 类型的步骤,需要知道当前上下文是什么。此执行在 DevIntegrated 上开始。

我不想让每个脚本都以...开头

$thisInstance = "Dev"
Run Code Online (Sandbox Code Playgroud)

...特别是因为当我们在接下来的几个月中迁移到环境(新服务器和命名实例)时,我必须对其进行编辑。

如果我启动 SQLPS,我可以通过切片和切块 Get-Location 的结果或运行来确定我的实例

(Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName
Run Code Online (Sandbox Code Playgroud)

当 SQL 代理启动 PowerShell 类型的作业时,它会在 C:\windows\system32 中启动,并且Get-Location路由不起作用,因为它不在 SQLSERVER 上下文中。我可以切换到该上下文,但我将处于 SQL Server 的“根”,并且不知道我应该在哪个实例中。Invoke-Sqlcmd出于相同的原因,使用该路由也不起作用(从技术上讲,它在那里超时不是默认实例)

据我所知,我已经列举了我可以进入工作日志的所有基本“事情”,但似乎没有任何显示 SQLSERVER:\SQL\Server1\DevIntegrated

Get-Process似乎我可以使用它和一些尝试通过击中实例和匹配 spid 来拼凑东西的巫术,但这听起来像是来自地狱的血腥黑客。一定有一些基本的东西我错过了,有人能解释一下吗?

研究 PowerShell 的替代方案

我曾调查过使用其他工作类型,但没有得到令人满意的解决方案。研究表明,SQL 代理下列出的 PowerShell 是 SQLPS,通过右键单击代理启动它的实例会自动将我放到正确的位置。只有当我将交互式代码粘贴到作业步骤中时,我才知道前面提到的差异。

操作系统的作业类型使我处于相同的状态,因为我找不到确定哪个实例将我放入命令外壳的方法。当然,我可以使用 sqlcmd 并获取 的值,@@servername …

sql-server-2005 sql-server-2008 sql-server powershell

14
推荐指数
2
解决办法
2314
查看次数

SELECT INTO 是否在运行时之前在 TempDB 中保留 #Object 名称?

将一个 quickie proc 放在一起以帮助调试,我遇到了一个似乎是编译器错误的地方。

create proc spFoo
    @param bit
as
begin
    if @param = 0
    begin 
        select * 
        into #bar
        from [master].dbo.spt_values
        -- where number between ...
    end
    else
    begin
        select top 10 * 
        into #bar
        from [master].dbo.spt_values
        order by newid();
    end;
end;
Run Code Online (Sandbox Code Playgroud)

尝试上述返回以下错误

消息 2714,级别 16,状态 1,过程 spFoo,第 19 行
数据库中已经有一个名为“#bar”的对象。

在人类可读的意义上,proc 似乎很好:select into由于它们被包裹在if-else块中,因此只会执行一个语句。不过很好,SQL Server 无法确认这些语句在逻辑上是否相互排斥。也许更令人困惑的是,当将drop table #foo放在 if-else 块中时错误仍然存​​在(假设它会告诉编译器取消分配对象名称),如下所示。

create proc spFoo
    @param bit
as
begin
    select top 1 * 
    into #bar …
Run Code Online (Sandbox Code Playgroud)

sql-server ddl tempdb temporary-tables

8
推荐指数
1
解决办法
511
查看次数

不区分大小写的排序规则仍然比较区分大小写

目前我正在试图创建一个表,一个文本列将比较案例默认情况下是敏感的。这是因为我们有一个第三方程序可以对我们的数据库执行搜索。该SELECT程序使用的语句不能更改。

抽象的问题是我们不知何故需要这个搜索不区分大小写,但它目前是区分大小写的。

我读到 Postgres 12 确实支持允许这种行为的非确定性排序规则。

我在德国 Windows 机器上安装了 Postgres 服务器(版本 PostgreSQL 12.1,由 Visual C++ build 1914 编译,64 位)。

因此,出于测试目的,我创建了一个新数据库进行测试:

CREATE DATABASE collation_test
    WITH 
    OWNER = postgres
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1;
Run Code Online (Sandbox Code Playgroud)

在这个数据库中,我创建了以下排序规则,我在一篇关于这些排序规则的文章中找到

CREATE COLLATION collat_ci (
  provider = 'icu',
  locale = 'und-u-ks-level2',
  deterministic = false
);
Run Code Online (Sandbox Code Playgroud)

在此之后,我需要一个表来测试这个排序规则

CREATE TABLE public.person
(
    "Id" bigint NOT NULL,
    "Name" text COLLATE public.collat_ci,
    PRIMARY KEY ("Id")
);

ALTER TABLE public.person
    OWNER to postgres;

INSERT …
Run Code Online (Sandbox Code Playgroud)

postgresql collation case-sensitive postgresql-12

8
推荐指数
1
解决办法
1958
查看次数

Powershell 类型的 SQL 代理作业在尝试通过 WMI 查询获取服务器上的磁盘空间时间歇性失败

  • Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64) 2009 年 3 月 29 日 10:11:52 版权所有 (c) 1988-2008 Microsoft Corporation Enterprise Edition(64 位),Windows NT 6.1(内部版本 7600:)(VM)
  • Microsoft Server 2008 R2 标准版
产品版本 10.0.2531.0
产品级别 SP1
版本 企业版(64 位)
引擎版本 3

在尝试执行以下 powershell 脚本时...

$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=localhost\myServer; Initial Catalog=SysAdmin; Integrated Security=SSPI")

$conn.Open()

$cmd = $conn.CreateCommand()

gwmi -query "select * from Win32_LogicalDisk where DriveType=3" | select Name, FreeSpace, Size | foreach {
   $Name      = $_.Name.substring(0,1)
   $FreeSpace = $_.FreeSpace
   $Size      = …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

6
推荐指数
1
解决办法
2325
查看次数

pg_ctl 挂在 ssh 上

我正在设计一个过程来测试我的 postgresql 10.8 备份,方法是将它们恢复到一次性虚拟机中的随机时间点。不过,我一直无法完全自动化该过程。我在官方文档的第 8 步(第 25.3.4 节)被阻止

  1. 启动服务器。

执行pg_ctl startover ssh 时,命令会挂起,直到被杀死。如果我直接通过 ssh 连接到 VM 并执行pg_ctl start,则命令会按预期快速返回。

2012 年的这个帖子似乎描述了一个类似的场景。在我的情况,不过Postgres的过程即使当它是挂呼叫会话被杀死成功启动(可能是9.0.5和10.8之间虽然有所改善?)。

这个 github 问题似乎相关,但遗憾的是,通过用一种我不知道的语言进行了长时间的重写“解决了”,并最终得出结论,它是pg_ctl二进制文件中的一个错误。

大问题

如何自动执行第 8 步,以便我可以继续对备份媒体进行后续验证测试?

这是我需要破解的二进制文件中的一个突出错误吗?或者我错过了一个明智的实施?

restore virtualisation ssh postgresql-10

6
推荐指数
1
解决办法
455
查看次数

默认允许的数据类型转换矩阵

今天我想定义一个 uuid 的 value 00000000-0000-0000-0000-000000000000。作为一名 SQL Server 人员,我通常会...

select cast(0x0 as uniqueidentifier);
Run Code Online (Sandbox Code Playgroud)

...但我现在在 postgres 世界中,所以我提出了一个明智的...

select cast('\x00'::bytea as uuid);
Run Code Online (Sandbox Code Playgroud)
ERROR:  cannot cast type bytea to uuid
LINE 1: select cast('\x00'::bytea as uuid);
               ^
Run Code Online (Sandbox Code Playgroud)

该死!所以我头部到对类型转换的Postgres文档希望看到像DOC这一个来审查,数据类型,我可以通过与默认情况下,无需施展创造一个显式类型转换

sql-server-implicit-explicit-conversion-matrix

如果文档中确实存在这样的图表,那么它就会被很好地隐藏起来。谷歌在这方面也不是很有帮助。

是否有关于 postgresql 中默认允许的类型转换的良好文档参考?


需要明确的是,我实际上并不关心 uuid

postgresql datatypes documentation type-conversion

6
推荐指数
2
解决办法
294
查看次数

无法从 psql 诱导退出代码 3

文档页面国家(重点煤矿)

退出状态

如果 psql 正常完成,则向 shell 返回 0,如果发生自身的致命错误(例如,内存不足,找不到文件),则返回 1,如果与服务器的连接出现故障并且会话没有交互,则返回3,如果脚本中发生错误并且设置了变量 ON_ERROR_STOP。

但是,我似乎无法诱导退出代码 3。

bash-4.2$ uname -a
Linux mvpg-centos-76.vagrantup.com 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
bash-4.2$ psql --version
psql (PostgreSQL) 10.12
bash-4.2$ psql -v ON_ERROR_STOP=1 -c 'select 1/0;'
ERROR:  division by zero
bash-4.2$ echo $?
1
bash-4.2$ 
Run Code Online (Sandbox Code Playgroud)

我还在 FreeBSD 11.3 和 Darwin 19.3 上重现了这种行为。我是否误解了文档或使用了错误的语法?

postgresql psql

6
推荐指数
1
解决办法
447
查看次数