小编Cra*_*ein的帖子

PostgreSQL 9.1 中的自动故障转移

如何在 PostgreSQL 9.1 中设置两台相同的服务器以进行自动故障转移。

操作系统

Centos 5
PostgreSQL 9.1 源码编译
postgres 用户账号存在于两台机器上,并且有一个 ssh 无密码密钥,可以连接两台机器。

我当前的设置:

主服务器配置:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  
Run Code Online (Sandbox Code Playgroud)

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust
Run Code Online (Sandbox Code Playgroud)

备用服务器

postgresql.conf 和 pg_hba.conf 与主服务器上配置的相同。

恢复.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'
Run Code Online (Sandbox Code Playgroud)

感谢 hzRoot,我现在明白了如何将服务器从备用服务器切换到主服务器。

使用以下命令,我可以将新从站与新主站同步,然后获取复制备份并运行。

在新主 (10.0.66.2) 上

  1. su - postgres
  2. 触摸 /opt/pgsql91/data/ 中的 trigger.txt
  3. recovery.conf …

postgresql failover

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

在 SQLCMD 模式下设置变量

使用 SQL Server 2008 R2 企业版

考虑以下语句:

:setvar source_server_name "SERVERNAME\INSTANCENAME"
Run Code Online (Sandbox Code Playgroud)

是否可以在 SQLCMD 模式下使用 TSQL 获取该值

就像是: :setvar source_server_name = SELECT @@servername

谢谢

2013 年 7 月 15 日更新

下面提供的两个答案并没有给出理想的结果,所以我添加了一个更相关的例子。

:setvar source_server_name [myserver]
Run Code Online (Sandbox Code Playgroud)

变量 source_server_name 设置为文本字符串 [myserver_1]

我希望能够做到这一点:

create table #tmp(
id int identity(1,1),
server sysname
)

insert into #tmp values('myserver_1'),('myserver_2');

:setvar source_server_name = SELECT server FROM #tmp WHERE id = 1

select '$(source_server_name)' 

(No column name)
myserver_1
Run Code Online (Sandbox Code Playgroud)

变量 source_server_name 将设置为 ID 1 的服务器中的值。

sql-server sql-server-2008-r2 sqlcmd

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

比较 SQL Server 2012 中的两个查询

我正在比较 SQL Server 2012 中的两个查询。目标是在选择最佳查询时使用查询优化器提供的所有相关信息。两个查询产生相同的结果;所有客户的最大 orderid。

在使用 FREEPROCCACHE 和 DROPCLEANBUFFERS 执行每个查询之前清除缓冲池

使用下面提供的信息,哪个查询是更好的选择?

-- Query 1 - return the maximum order id for a customer
SELECT orderid, custid
FROM Sales.Orders AS O1
WHERE orderid = (SELECT MAX(O2.orderid)
                 FROM Sales.Orders AS O2
                 WHERE O2.custid = O1.custid);


-- Query 2 - return the maximum order id for a customer
SELECT MAX(orderid), custid
FROM Sales.Orders AS O1
group by custid
order by custid
Run Code Online (Sandbox Code Playgroud)

统计时间

查询 1 STATISTICS TIME:CPU 时间 = 0 毫秒,经过时间 …

performance sql-server-2012 query-performance

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

跟踪 SQL Server 中的应用程序超时错误

SQL Server 2008 SP3

如何追踪这些超时错误?

在此处输入图片说明

错误显示在专门用于 IIS 中的错误报告的 Intranet 仪表板上。我怀疑 Web 应用程序中的默认超时时间为 30 秒,如果查询时间超过 30 秒,则会引发异常。由于在这些 SQL 服务器上有许多查询需要超过 30 秒的时间,因此我不能仅根据持续时间在探查器中进行过滤。

为这个仪表板监控的网站提供服务的是两台 IIS 服务器,它们从七个 SQL Server 实例中检索数据。

我可以使用“用户错误消息事件”“OLEDB 错误事件”来跟踪 SQL Server Profiler 中的这些错误吗?

sql-server query-timeout connectivity

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

MERGE 是否使用 tempdb?

考虑以下查询:

MERGE [Parameter] with (rowlock) AS target
    USING (SELECT @AreaId, @ParameterTypeId, @Value)
            AS source (AreaId, ParameterTypeId, Value)
    ON (target.AreaId = source.AreaId AND 
        target.ParameterTypeId = source.ParameterTypeId)
    WHEN MATCHED THEN 
        UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
    WHEN NOT MATCHED THEN
        INSERT ([AreaId], [ParameterTypeId], [Value])
        VALUES (source.AreaId, source.ParameterTypeId, source.Value);
Run Code Online (Sandbox Code Playgroud)

统计 I/O 提供以下输出:

表“参数类型”。扫描计数 0,逻辑读取 2,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表 'Area'。扫描计数 0,逻辑读取 2,物理读取 0,预读读取 0,lob 逻辑读取 0,lob 物理读取 0,lob 预读读取 0。
表“参数”。扫描计数 1,逻辑读取 4,物理读取 0,预读读取 0,lob 逻辑读取 …

sql-server t-sql

12
推荐指数
2
解决办法
2191
查看次数

当有很多用户时,DROP USER 花费的时间太长

在具有足够 RAM 和快速磁盘的 SQL Server 2014 实例上,有 160 多个用户可以访问数据库。出于某种我不知道的原因,DROP USER [username]在这个数据库中运行命令每个用户最多需要 5 秒。

将用户重新映射到登录并恢复他们的权限非常快。

在从生产中刷新 DEV 数据库的上下文中,我必须删除并重新创建所有数据库用户。所以是的,删除数据库用户并重新创建它们是必要的。

如何加速DROP USER命令?

请记住,对于我正在编写的实例,我必须运行它超过 160 次。

这是我正在使用的 SQL:

DECLARE drop_user_cur CURSOR FOR 
SELECT name FROM #drop_users

OPEN drop_user_cur
FETCH NEXT FROM drop_user_cur INTO @user

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'use [' + @db_name + '] DROP USER [' + @user + ']'
    BEGIN TRY
        print @sql
        EXECUTE(@sql)
    END TRY
    BEGIN CATCH
        print 'ERREUR : ' + @sql …
Run Code Online (Sandbox Code Playgroud)

security sql-server

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

PostgreSQL PITR 还原

我有一个在 CentOS 5.8 32 位操作系统上运行的 PostgreSQL 9.1 服务器,并且我启用了 WAL 归档。在这台服务器上,有三个数据库:databaseA、databaseB和databaseC。有人在下午 12 点在 databaseB 上删除了一个表,我想将 databaseB 恢复到该表被删除的时间之前。现在时间是下午 3 点。

如何在不丢失其他两个数据库中三个小时的数据的情况下将 databaseB 恢复到下午 12 点?

配置文件

wal_level = archive             
archive_mode = on               
archive_command = 'test ! -f /opt/pgsql/logs/%f && cp %p /opt/pgsql/logs/%f'
max_wal_senders = 100
Run Code Online (Sandbox Code Playgroud)

恢复配置文件

restore_command = 'cp /opt/pgsql/logs/%f %p'
recovery_target_time = '2012-06-29 11:59:59 CEST'
Run Code Online (Sandbox Code Playgroud)

我在上午 9 点运行了我的基本备份

pg_basebackup -h 127.0.0.1 -D /opt/pgsql/backup
Run Code Online (Sandbox Code Playgroud)

PostgreSQL 服务在下午 3 点关闭。

postgresql backup recovery

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

升级到 2016 后,SQL Server 代理无法连接到实例

在装有 SQL Server 2014 Enterprise 的群集 Windows 2012 R2 服务器上。

刚刚将一个实例从 2014 SP1 CU4 升级到 2016 RTM,现在在尝试启动 SQL Server 代理时出现此错误。

SQL SERVER 代理日志

2016-06-06 11:53:58 - ? [100] Microsoft SQLServerAgent version 13.0.1601.5 (X64 unicode retail build) : Process ID 10884
2016-06-06 11:53:58 - ? [495] The SQL Server Agent startup service account is DOMAIN\USERNAME.
2016-06-06 11:54:28 - ! [150] SQL Server does not accept the connection (error: 65535). Waiting for Sql Server to allow connections. Operation attempted was: Verify Connection …
Run Code Online (Sandbox Code Playgroud)

sql-server upgrade sql-server-2016

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

SQL Server 备份因磁盘空间错误而失败

在 Windows 2008 64 位上运行的 SQL Server 2008 R2 RTM。

使用以下命令备份单个数据库时出现问题

backup database [somedatabase] 
to disk = '\\somehost\d$\BACKUP\somedirectory\some_database.bak'
with compression, init, stats=1
Run Code Online (Sandbox Code Playgroud)

数据库备份了一段时间就好了

93 percent processed.
94 percent processed.
Run Code Online (Sandbox Code Playgroud)

然后我收到有关磁盘空间的错误

消息 3202,级别 16,状态 1,第 1 行
写入“\somehost\d$\BACKUP\somedirectory\some_database.bak”失败:1130(没有足够的服务器存储空间来处理此命令。)
消息 3013,级别 16,状态 1,第 1 行
BACKUP DATABASE 异常终止。

这没有任何意义,因为有超过 800GB 的可用磁盘空间,而备份使用的是 121GB。

在 SQL Server 的日志中,我收到此消息

Date        9/25/2013 1:04:56 PM
Log     SQL Server (Current - 9/25/2013 12:15:00 PM)

Source      Backup

Message
BackupIoRequest::ReportIoError: write failure on backup device 
'\\somehost\d$\BACKUP\somedirectory\some_database.bak'. Operating 
system error 1130(Not …
Run Code Online (Sandbox Code Playgroud)

sql-server backup sql-server-2008-r2

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

执行后跟踪存储过程的参数

我被要求确定存储过程的权限问题。根据用于其参数的值,此存储过程以两种可能的方式运行。

exec ps_my_stored_procedure @a=1, @b=2, @c=3
Run Code Online (Sandbox Code Playgroud)

处理方式与

exec ps_my_stored_procedure @a=5, @b=7, @c=0
Run Code Online (Sandbox Code Playgroud)

您可以说这ps_my_stored_procedure在逻辑上分为两个完全独立的过程。

使用dm_exec_procedure_statsdm_exec_query_stats,我可以找到显示所使用存储过程的 SQL 的执行计划。但是,我无法恢复参数的定义方式和值。

是否可以使用dm_exec_procedure_statsdm_exec_query_stats和任何其他管理视图来重建存储过程的执行,以显示用于其参数的值。

我真正想要的是在缓存中找到存储过程的实际执行,以便我可以执行它EXECUTE AS LOGIN = 'someone'来解决权限问题

sql-server stored-procedures

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