将数据库从一个实例还原到另一个实例时,有时必须将 SQL Server 登录名重新链接到数据库用户。
这通常是通过以下程序之一来实现的。
use <database>
go
sp_change_users_login 'Update_one', '<datbase_user>', '<sql server login>'
go
Run Code Online (Sandbox Code Playgroud)
use <database>
go
ALTER USER [<datbase_user>] WITH LOGIN = [<sql server login>]
go
Run Code Online (Sandbox Code Playgroud)
这些命令会将孤立的数据库用户重新链接到相应的 SQL Server 登录名。
是否可以在不删除 SQL Server 登录名或数据库用户的情况下打破这种关系?
我已经查看了DMVsys.database_principals和sys.server_principalsDMV,但它们不可修改。
我创建了一个包含 650 个 Numeric(19,4) 列的表。当我打开页面压缩时,通过运行
ALTER TABLE fct.MyTable REBUILD WITH (DATA_COMPRESSION = PAGE);
Run Code Online (Sandbox Code Playgroud)
我得到
消息 1975,级别 16,状态 1
索引“PK_Mytable”行长度超过了“8060”字节的最大允许长度。
但是 650 乘以 9 字节仅为 5850 字节,这与规定的 8060 字节的限制相去甚远。
服务器运行的是 Windows 2012 r2 和 SQL Server 2016 SP1 CU2
使用页面压缩时的行开销是多少?
这是一些代码来显示我的意思:
/* test script to demo MSG 1975 */
DECLARE @sql NVARCHAR(max)='', @i INT =0
drop table if exists dbo.mytable;
SET @sql = 'Create table dbo.Mytable (MyTableID bigint not null
identity(1,1) primary key clustered, '
WHILE @i < 593 BEGIN
SET …Run Code Online (Sandbox Code Playgroud) 是否可以按表中的元素(如COLUMN LIKE='Value%')进行分组PIVOT?我有一个表 [DBT].[Status],其中包含各种状态(数据库、实例等),并且不想将所有 PROD 和 TEST 值作为单个值进行透视/查询,而是将它们分组。
例如代替具有用于状态列Prod,Prod ACC,Prod APP,...等。我将仅有一个包含的值列Name LIKE 'Prod%'和Name LIKE 'Test%'。
到目前为止我所拥有的:
CREATE TABLE [DBT].[Status](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Status] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY],
CONSTRAINT [IX_Status] UNIQUE NONCLUSTERED
(
[Name] ASC
)WITH (PAD_INDEX …Run Code Online (Sandbox Code Playgroud) 当使用具有定义的列集的 SELECT 语句查询数据库时,大约 21 秒内就会收到结果。
\n, *如果定义的列集列表末尾有一个附加星号 ( ),则查询将在 2 秒内返回结果。
执行计划差异很大。
\n您可以通过 PasteThePlan 中的链接找到良好的实际查询执行计划和不良的实际查询执行计划。
\n\n SELECT -- DISTINCT -- 27.04.2020\n \'SchuelerKlasse\' AS EcoQuery,\n VX_PERSON.PER_MAN_ID, VX_PERSON.PER_ID, VX_PERSON.PER_NAME, VX_PERSON.PER_VORNAME, VX_PERSON.PER_LB_PER_ID, \n VX_PERSON.PER_GESCHLECHT, VX_PERSON.PER_GEBURTSDATUM, VX_PERSON.PER_TELP, VX_PERSON.PER_MAILP, VX_PERSON.PER_NATP, VX_PERSON.PER_VERSICHERTENNUMMER, VX_PERSON.PER_LAND,\n VX_ADRESSE.ADR_STRASSE, VX_ADRESSE.ADR_PLZ, VX_ADRESSE.ADR_ORT,\n VX_KLASSE.KL_CODE, VX_KLASSE.KL_BEZEICHNUNG,\n VX_KLASSEABSCHNITTSCHUELER.KAS_ANMELDE_STATUS, \n VX_KLASSEABSCHNITTSCHUELER.KAS_ANMELDETYP, VX_KLASSEABSCHNITTSCHUELER.KAS_ABSCHNITTSNR,\n VX_KLASSE_ZEITRAUM.KLZ_IS_ABSCHLUSSKLASSE, VX_KLASSE_ZEITRAUM.KLZ_ZR_NR,\n VX_ZEITRAUM.ZR_BEGINN, VX_ZEITRAUM.ZR_ENDE\n ,\'\' AS FA_CODE\n ,\'\' AS FA_BEZ_STP, \'\' AS FA_BEZ_STP_LANG\n , \'\' AS EcoOrig_FA_CODE, …Run Code Online (Sandbox Code Playgroud) 我必须从 PostgreSQL 9.2 升级到 9.6。以下是我面临的挑战:
由于我们有流式复制设置,并且PostgreSQL在流式复制模式下不支持从低到高的版本升级,当我升级主时,我必须重建从属,这需要3个小时。我没有那个时间可以闲下来。在任何给定的时间,我们都需要一个从站和一个主站可用。有没有其他方法可以升级而不必重建从属设备,使用流式复制?
为了构建逻辑复制,我们考虑使用 slony 但 slony 有一些限制,因为它不会自动复制:
请提出一些建议,以避免从属重建,并以最少的停机时间进行升级,并准备好一主一从。
在这个问题中,我正在使用sys.sysobjects. 但是,提到的答案之一sys.system_objects。我只是想知道这些表之间有什么区别?
sys.objectssys.system_objectssys.sysobjectssysobjects 有更多的东西。
> SELECT count(*) FROM sysobjects;
2312
> SELECT count(*) FROM sys.system_objects;
2201
> SELECT count(*) FROM sys.objects;
> 111
SELECT count(*)
FROM sys.sysobjects
WHERE NOT EXISTS (
SELECT 1
FROM sys.system_objects
WHERE system_objects.object_id = sysobjects.id
);
> 111
Run Code Online (Sandbox Code Playgroud) 我想将SQL Server 2014 Analysis Services添加到SQL Server的特定实例并以这样的方式对其进行配置,即 Analysis Services (SSAS) 和未来的 Reporting Services (SSRS) 将仅接收对特定实例的请求IP,为了让SQL Server Browser 服务保持在停止状态。
对于运行多个 SQL Server 2014 实例的单个 Windows Server,我有以下先决条件:
- 2 x 网卡 - 12 个 IP 地址 - 10 个 SQL Server Server 服务实例(正在运行) - 10 个 SQL Server 代理服务器服务实例(正在运行) - 1 x SQL Server 浏览器服务(未运行)
Windows Server NIC 的配置如下:
- 1 x NIC(备份网络)
- 10.2.0.1
- 1 x 网卡 (LAN) … sql-server ssas configuration sql-server-2014 sql-server-2016
我需要备份 SQL Server 2016 的实例,我已经每晚备份了所需的数据库,但是我需要备份实例的用户和角色..... 我该怎么做?内置作业或自定义 T-sql 我可以安排运行吗?
如果有人能指出我正确的方向,我对 SQL 不太擅长
我在 PostgreSQL 13 中有下表:
field type
----- ----
Seq bigserial
code varchar
Run Code Online (Sandbox Code Playgroud)
Seq是主键(自增)
Code是唯一键索引
Insert Into newtable (Code) Values ('001') On Conflict(Code) Do Nothing --> Seq value is 1
Insert Into newtable (Code) Values ('001') On Conflict(Code) Do Nothing
Insert Into newtable (Code) Values ('001') On Conflict(Code) Do Nothing
Insert Into newtable (Code) Values ('002') On Conflict(Code) Do Nothing --> Seq value is 4
Run Code Online (Sandbox Code Playgroud)
为什么是序列4?有什么方法可以仅在成功插入时增加价值?
我的情况是 MySQL 日志分区在不到一天的时间内就被填满了。我无法禁用二进制日志,因为我需要它们进行复制。
我知道我可以设置日志保留时间,但它接受天数,搜索只显示我这个https://serverfault.com/questions/179165/can-expire-logs-days-be-less-than-1-day-in -mysql问题,建议通过脚本自己完成。
由于这个问题已经有将近 8 年的历史了,我想知道现在是否有可能。
如果重要,我正在使用 Percona MySQL 5.7
sql-server ×5
postgresql ×2
backup ×1
compression ×1
data-pages ×1
index-tuning ×1
mysql ×1
mysql-5.7 ×1
percona ×1
permissions ×1
pivot ×1
security ×1
sequence ×1
ssas ×1
upgrade ×1
upsert ×1