目前使用 Postgres 14。
运行CLUSTER sometable USING someindex;
很棒,但是是否有一个查询可以确定表在多次更新和删除后变得如何“非集群”?
谷歌搜索并阅读https://www.postgresql.org/docs/14/sql-cluster.html只是说“设置定期维护脚本......以便定期重新集群所需的表”,这是没有帮助的,因为它没有没有给出任何关于如何确定定期重新聚类的周期的指示。
目前使用 Postgres 14。
运行CLUSTER sometable USING someindex;
很棒,但是是否有一个查询可以确定表在多次更新和删除后变得如何“非集群”?
谷歌搜索并阅读https://www.postgresql.org/docs/14/sql-cluster.html只是说“设置定期维护脚本......以便定期重新集群所需的表”,这是没有帮助的,因为它没有没有给出任何关于如何确定定期重新聚类的周期的指示。
AWS RDS Postgresql 12.10
max_worker_processes 将此设置为您要为 PostgreSQL 独占共享的 CPU 数量。这是数据库引擎可以使用的后台进程数。设置此参数将需要重新启动服务器。默认值为 8。
8
无论实例类型(以及 vCPU 数量)如何,默认值也在AWS RDS Postgresql 中。我是否在使用默认max_worker_processes
值时通过支付 db.r5.12xlarge(48 个 CPU)来欺骗自己?
我从 Web 界面看到需要对我的 RDS postgresql 实例进行维护,所以我运行了aws rds describe-pending-maintenance-actions
,它说有一个“系统更新”,因为“有新的操作系统更新可用”。
没关系,所以我在 90 分钟前(aws rds stop-db-instance
当时aws rds start-db-instance
)重新启动了实例。
90 多分钟后,实例仍然“需要维护”。
我做错了什么,或者没有做什么?或者这只是一个通知,表明 AWS 将做一些我无法控制的事情?
$ aws rds describe-pending-maintenance-actions --output=table
-------------------------------------------------------------------------------------------
| DescribePendingMaintenanceActions |
|| PendingMaintenanceActions ||
|+---------------------+-----------------------------------------------------------------+|
|| ResourceIdentifier | arn:aws:rds:us-east-1:123456789012:db:xxxxxxxxxxxx ||
|+---------------------+-----------------------------------------------------------------+|
||| PendingMaintenanceActionDetails |||
||+-----------------------------+-------------------------------------------------------+||
||| Action | system-update |||
||| AutoAppliedAfterDate | 2022-06-30T00:00:00+00:00 |||
||| CurrentApplyDate | 2022-06-30T00:00:00+00:00 |||
||| Description | New Operating System update is available |||
||| ForcedApplyDate | 2022-10-30T00:00:00+00:00 |||
||+-----------------------------+-------------------------------------------------------+||
|| PendingMaintenanceActions ||
|+---------------------+-----------------------------------------------------------------+|
|| ResourceIdentifier | arn:aws:rds:us-east-1:123456789012:yyyyyyyyyyyyy ||
|+---------------------+-----------------------------------------------------------------+|
||| PendingMaintenanceActionDetails |||
||+-----------------------------+-------------------------------------------------------+||
||| Action | system-update |||
||| AutoAppliedAfterDate | 2022-06-30T00:00:00+00:00 |||
||| CurrentApplyDate | 2022-06-30T00:00:00+00:00 |||
||| Description | New Operating System update is available |||
||| ForcedApplyDate | 2022-10-30T00:00:00+00:00 |||
||+-----------------------------+-------------------------------------------------------+||
从表中获取第二高的值已经解决了很多次,但我正在寻找每个组中的第二高值。
鉴于此表:
+----+-----+
| 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 |
+----+-----+
我想得到标记的行。
伪代码:
select col_a, penultimate(col_b)
from foo
group by col_a;
当我需要重新拥有150 个表,每个表有 40 个表,但在运行 6000 个 ALTER 语句之前显示来自 SELECT 的 6000 行时,这个答案非常适合。
因此,如主题中所述,有什么方法可以抑制 SELECT 输出?
sides=> SELECT format(
sides(> 'ALTER TABLE %I.%I.%I OWNER TO sides_owner;',
sides(> table_catalog,
sides(> table_schema,
sides(> table_name
sides(> )
sides-> FROM information_schema.tables
sides-> WHERE table_schema = 'strans';
format
---------------------------------------------------------------------
ALTER TABLE sides.strans.foo OWNER TO sides_owner;
ALTER TABLE sides.strans.blarg_p2020_02 OWNER TO sides_owner;
ALTER TABLE sides.strans.blarg_p2020_03 OWNER TO sides_owner;
ALTER TABLE sides.strans.blarg_p2020_04 OWNER TO sides_owner;
ALTER TABLE sides.strans.blarg_error_p2019_01 OWNER TO sides_owner;
etc
etc
etc
我刚刚创建了一个 RDS Postgres 实例,用户postgres
(以及它的主密码),并通过 psql 作为 user 连接postgres
。
然后我使用 运行从当前系统生成的脚本pg_dumpall --schema-only
,它立即在ALTER ROLE
命令上失败:
ERROR: must be superuser to alter superusers
好的,但我如何superuser
授予postgres
?我发现的所有文档都“方便地”跳过了那部分......
编辑:这是确切的命令和错误消息:
postgres=> CREATE ROLE "READONLY";
CREATE ROLE
postgres=> ALTER ROLE "READONLY" WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'mdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
ERROR: must be superuser to alter superusers
我们有一个名为的多段 AG 侦听器SQLAGL01
,它指向这两个地址: 10.143.162.32(主服务器) 10.140.165.32(DR 服务器)
因为第 3 方(这意味着我们无法修复它,并且不,我们无法迁移到其他东西)应用程序软件使用不支持的旧驱动程序,所以MultiSubnetFailover=True
我们看到报告有一半时间失败的问题,因为SQLAGL01
解决了DR 地址 10.140.165.32。
按照Microsoft 文档,我们设置RegisterAllProvidersIP=0
并重新启动了集群。但是,SQLAGL01
仍有一半时间解析为 DR 地址。
在Failover Cluster Manager中,AG Listener的owner节点为主服务器,DR地址为offline。(这正常吗?)
这是集群角色的屏幕截图:
编辑:增值RegisterAllProvidersIP
。
PS C:\windows\system32> get-clusterresource "Cluster Name" | Get-ClusterParameter RegisterAllProvidersIP
Object Name Value Type
------ ---- ----- ----
Cluster Name RegisterAllProvidersIP 0 UInt32
编辑 2:添加了 AG 集群资源值。似乎没有RegisterAllProvidersIP
AG Listener 的资源。
编辑 3:添加了实际的侦听器资源值。
PS C:\windows\system32> get-clusterresource KYHIXSQLAGL01_KYHIXSQLAGL01 | Get-ClusterParameter RegisterAllProvidersIP
Object Name Value Type
------ ---- ----- ----
KYHIXSQLAGL01_KYHIXSQLAGL01 RegisterAllProvidersIP 1 UInt32
根据这个 Microsoft 链接,SQL Server 12.0.6372.1 需要任何至少具有 SQL 2014 SP3 的系统,所以我的前任通过 SP3 安装它。现在版本是“2014 (SP3-CU-GDR) (KB4535288) - 12.0.6372.1”。
由于该安全补丁仅修复了 Reporting Services 的特定问题,并且比 CU4 包小,因此我也应该安装 CU4 补丁的 ISTM。
但是怎么做?我是先卸载 KB4535288,然后安装 KB4500181 (CU4),然后重新安装 KB4535288,还是可以将 KB4500181 放在 KB4535288 之上(这似乎会覆盖 KB4535288 文件。
(这只是一个“复制器”,而不是真正的代码,因为它又长又复杂。)
的输出
SET NOCOUNT ON
select @@SERVICENAME
select @@version
是:
--------------------------------------------------------------------------------------------------------------------------------
MSSQLSERVER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2014 (SP3-CU4) (KB4500181) - 12.0.6329.1 (X64)
Jul 20 2019 21:42:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
如何获得如下所示的输出:
MSSQLSERVER
Microsoft SQL Server 2014 (SP3-CU4) (KB4500181) - 12.0.6329.1 (X64)
Jul 20 2019 21:42:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
我继承了带有 SQL Server 2008R2 的旧 QA 数据库服务器(是的,是的,我知道它超出了 EOL;对此我无能为力!)并安装了 SSRS。
它是不同 VM 上 SP 服务器的后端。
如何判断 SSRS 是在本机模式还是 SP 集成模式下安装的?
我创建了一个主密钥,然后是一个证书并加密了我的数据库。
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
如何更改 MASTER KEY 密码?
谢谢
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 3: where rolname not in ("postgres",...
^
QUERY: select rolname
from pg_roles
where rolname not in ("postgres", "pg_signal_backend", "TAP")
CONTEXT: PL/pgSQL function inline_code_block line 4 at FOR over SELECT rows
谢谢
SQL 服务器 2005
我运行了“dbcc SQLPerf(logspace)”,然后进行了两次日志备份,然后再次运行了“dbcc SQLPerf(logspace)”。与使用的 48.55% 相比没有变化,即使“dbcc opentran (foo)”表示没有活动的打开事务。
这是否意味着存在阻止日志可用空间在备份后更改的非活动打开事务?
谢谢。
想要自动化一些任务而不是为所有事情启动 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;
所以,我写了这个批处理文件:
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 DATABASE XeroxGHSCRMTest_MSCRM 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
::
echo.
sqlcmd -S AGABQ0VMCRMDB01\PROD_CRM -E -Q "%@SQLSTRING%"
但是,它在“go”命令中出现语法错误而失败。我试过“去”和“去”;没有运气。
任何使这项工作的提示或指导将不胜感激。