小编Ron*_*ohn的帖子

如何将多个语句传递到 sqlcmd?

想要自动化一些任务而不是为所有事情启动 SSMS,我正在尝试编写一个批处理文件来运行这些语句,当我将它们粘贴到 sqlcmd 提示符中时,它可以完美地工作。他们只是检查镜像状态,暂停镜像,然后再次检查状态。(为了最大限度地减少依赖性并简化从一台服务器到另一台服务器的迁移,我想将所有命令保存在一个文件中。)

select cast(DB_NAME(database_id) as char(30)),
        cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;

ALTER DATABASE db1 SET PARTNER SUSPEND;
ALTER DATABASE db2 SET PARTNER SUSPEND;
go;

select cast(DB_NAME(database_id) as char(30)),
        cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;
Run Code Online (Sandbox Code Playgroud)

所以,我写了这个批处理文件:

SETLOCAL ENABLEDELAYEDEXPANSION
SET @SQLSTRING=select cast(DB_NAME(database_id) as char(30)), ^
        cast(mirroring_state_desc as char(15)) ^
from sys.database_mirroring ^
where mirroring_state_desc is not null; ^
go ^
^
ALTER DATABASE MSCRM_CONFIG SET PARTNER SUSPEND; ^
ALTER …
Run Code Online (Sandbox Code Playgroud)

scripting t-sql sqlcmd sql-server-2012

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

多次备份后,SQL Server 日志文件使用百分比不会下降

SQL Server 2005

我运行了“dbcc SQLPerf(logspace)”,然后进行了两次日志备份,然后再次运行“dbcc SQLPerf(logspace)”。尽管“dbcc opentran (foo)”表示没有活动的打开事务,但与使用的 48.55% 相比没有变化。

这是否意味着存在阻止日志可用空间在备份后更改的非活动打开事务?

谢谢。

sql-server-2005 transaction-log

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

如何更改 SQL Server 主密钥密码?

我创建了一个主密钥,然后创建了一个证书并加密了我的数据库。

CREATE MASTER KEY ENCRYPTION
BY PASSWORD='A Very Strong Password';
GO

CREATE CERTIFICATE foo
WITH 
SUBJECT='Database Encryption for Multi';
GO

USE mydatabase
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE foo;
GO

ALTER DATABASE mydatabase SET ENCRYPTION ON;
GO
Run Code Online (Sandbox Code Playgroud)

如何更改主密钥密码?

谢谢

encryption sql-server-2012 transparent-data-encryption

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

SQL Server 2016 上的巨大堆表和表压缩

我的数据库很大,最近我注意到几个月前添加的新表是罪魁祸首。

这是表脚本。

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Entry_tracker](
    [S.Number] [int] IDENTITY(1,1) NOT NULL,
    [EntryId] [varchar](50) NOT NULL,
    [EventNumber] [varchar](18) NOT NULL,
    [Data] [varbinary](max) NOT NULL,
    [TrackDateTime] [datetime] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[Entry_tracker] ADD  CONSTRAINT [DF_Entry_tracker_TrackDateTime]  DEFAULT (getdate()) FOR [TrackDateTime]
GO
Run Code Online (Sandbox Code Playgroud)

我收集了这张表的信息,了解到该表大约有1600万行,表大小为1.4TB。在此处输入图片说明

尽管如此,我认为桌子的大小对于没有。的记录。

应用程序不查询该表。它只是存储来自另一个表的相同条目的不同版本。

我检查了碎片信息,它显示平均碎片为 0,平均空间使用率为 93%。 在此处输入图片说明

由于我使用的是 SQL Server 2016,我虽然可以使用表压缩,因此尝试sp_estimate_data_compression_savings估计可能的空间节省。但是,结果显示没有节省。

size_with_current_compression_setting(KB) 等于 size_with_requested_compression_setting(KB)

任何人都可以指导我找到这张表的问题吗?

这非常重要,因为这会占用大量磁盘空间。

感谢你的帮助。

sql-server disk-space heap fragmentation compression

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

Postgres btree 索引键是否被压缩?

v8.4 和 v9.2(是的,我知道它们过时且不受支持,但我对此无能为力。)

我管理(但未设计)的数据库中的某些表在 CHARACTER VARYING(256) 字段上具有 btree 索引。即使字段值不全为空,其中的数据长度也不超过 12 个字符。

是的,这些列的物理存储是高度压缩的,但是 btree 索引呢?如果将列更改为 VARCHAR(12),索引会更有效吗?

谢谢

postgresql performance index compression postgresql-performance

2
推荐指数
1
解决办法
1063
查看次数

如何让 Postgres DO $$ 在 bash 提示符下工作?

Linux RHEL 6.10 上的 Postgres 9.6.9

如果我将 DO 命令用双引号括起来,角色用单引号括起来,那么 bash 会解释$$,这显然会使命令失败。所以我切换了双引号和单引号,但现在它将NOT IN字符串文字视为列名,这也会引发错误。

那么,正如标题中所提到的,DO $$从命令行获取命令的魔力是什么?

$ export PGHOST=10.x.y.z
$ export PGUSER=postgres
$ psql -c 'do $$  
>          declare rolename text;
>          begin
>            for rolename in select rolname 
>                            from pg_roles 
>                            where rolname not in ("postgres",
>                                                  "pg_signal_backend",
>                                                  "TAP")
>            loop
>            execute "DROP ROLE " || rolename;                   
>            end loop;
>          end $$
>          ;'
ERROR:  column "postgres" does not exist
LINE …
Run Code Online (Sandbox Code Playgroud)

postgresql scripting postgresql-9.6

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

如何获得每组第二高的值?

从表中获取第二高值已经解决了很多次,但我正在寻找每组中的第二高值。

鉴于此表:

+----+-----+
| A  |  10 |
| A  |  20 |
| A  |  35 |  <-- This record
| A  |  42 |
| B  |  12 |
| B  |  21 |  <-- This record
| B  |  33 |
| C  |  14 |
| C  |  23 |
| C  |  38 |
| C  |  41 |  <-- This record
| C  |  55 |
+----+-----+
Run Code Online (Sandbox Code Playgroud)

我想获得标记的行。
伪代码:

select col_a, penultimate(col_b) …
Run Code Online (Sandbox Code Playgroud)

postgresql select greatest-n-per-group max postgresql-9.6

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