标签: sql-server

自动重命名 SQL Server

我们正在更换我们的 SQL Server,并决定重命名服务器本身比更改其他所有内容以指向新名称要容易得多。我们找到了有关更改 SQL Server 实例名称以匹配计算机名称的说明,如下所示:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local
Run Code Online (Sandbox Code Playgroud)

尽管 SQL 企业管理器似乎不喜欢这些在一起。我必须将其更改为以下内容才能使其协同工作:

sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO
Run Code Online (Sandbox Code Playgroud)

这还不错,但我更喜欢自动化程度更高的事情。由于@@ServerName 返回实例的名称,我想出了如何自动化第一行:

sp_dropserver @@ServerName; GO
Run Code Online (Sandbox Code Playgroud)

我还了解到 SERVERPROPERTY('ServerName') 应该返回计算机名称,所以我想我可以用它来自动化第二部分,但这不起作用:

sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO
Run Code Online (Sandbox Code Playgroud)

我尝试设置一个变量,无论如何我都需要这样做来更新 SQL 代理作业,但这也不起作用:

DECLARE @srv sysname;
SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname);
sp_addserver @srv, 'local'; GO
Run Code Online (Sandbox Code Playgroud)

“sp_addserver”附近的语法不正确。

我非常希望不必将新服务器名称硬编码到脚本中,以使其更易于重用。有人有任何想法吗?

rename sql-server

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

SQL Server Express 服务未启动

我昨天买了我的第一个 VPS,并在上面安装了Microsoft SQL Server 2012 Express

然后我重新启动了我的 VPS。但是 SQL Server 服务没有启动。我试过手动启动它,但它无法启动:

SQL Server 服务未启动

问题是什么?如何解决?

PS:这是我第一次管理服务器,我是新手,如果您需要更多详细信息,请发表评论。我会更新问题。

更新 1:这是来自事件查看器的一些日志详细信息,我认为它们可能对这个问题有用:

FCB::Open failed: 无法打开文件 e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\MSDBData.mdf for file number 1. OS error: 3(系统找不到指定的路径。 )。

资源数据库构建版本为 11.00.3000。这只是一条信息性消息。无需用户操作。

FileMgr::StartLogFiles: 创建或打开文件 'e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\MSDBLog.ldf' 时发生操作系统错误 2(系统找不到指定的文件。)。诊断并更正操作系统错误,然后重试该操作。

启动数据库“模型”。

FCB::Open failed: 无法打开文件 e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\model.mdf for file number 1. OS error: 3(系统找不到指定的路径。 )。

FileMgr::StartLogFiles: 创建或打开文件 'e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\modellog.ldf' 时发生操作系统错误 2(系统找不到指定的文件。)。诊断并更正操作系统错误,然后重试该操作。

我对这些感到困惑e:\,我的 VPS 只有一个 C:\ 驱动器,那么 e:\ 是什么?

windows-server-2008-r2 sql-server sql-server-2012

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

Sql Server Management Studio 2008 突然无响应

当我尝试从任务栏启动 SSMS 时,出现一个非常奇怪的错误。它似乎以正常速度打开,但对任何输入只发出一声哔声。任务管理器中 CPU 使用率为 0%,并且没有 [无响应] 消息。

它不会响应任务栏中的右键单击并关闭所有窗口命令,但任务管理器中的“结束任务”确实会杀死它。

当我从命令行启动并使用 -S 开关指定服务器并使用 -E 使用 Windows 身份验证时,它运行良好。

sql-server ssms

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

如何重命名 SQL Server Amazon RDS 实例上的数据库?

尝试通过 SQL Server Management Studio 和 Transact SQL 重命名托管在 SQL Server Amazon RDS 实例上的数据库会导致以下错误。

用户无权更改数据库“Morningstar”、数据库不存在或数据库未处于允许访问检查的状态。

请注意,这是我尝试过的 Transact SQL 语句。

ALTER DATABASE <OldName> Modify Name = <NewName>;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我想出的最佳选择是使用新名称恢复原始数据库的副本,然后删除原始数据库。有关如何执行此操作的详细信息,请参阅我的StackOverflow 帖子

这种方法至少有以下缺点。

  1. bacpac 的导出和导入操作可能需要很长时间。
  2. 在整个过程中,任何对数据库执行写入操作的应用程序或网站都需要脱机。
  3. 所涉及的手动步骤可能会导致错误。
  4. RDS 实例需要足够大以承载数据库的两个副本,如果您希望将原始数据库保留在那里作为回滚策略,直到新的实例可用。

任何人都可以提出一种没有这些缺点的替代方法吗?

更新:我对重命名托管在 RDS 实例中的 SQL Server 数据库感兴趣 - 而不是 RDS 实例。

sql-server amazon-rds

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

Microsoft SQL Server 安装位置的重要性

我有一台带有便宜的慢速磁盘和一个昂贵的快速磁盘的服务器。

我想将昂贵的磁盘用于所有对速度很重要的事情,例如我的数据库。

为了省钱,我想将慢速磁盘用于无论是快还是慢都没有太大区别的任何事情,例如备份。

现在,我的问题是,我应该在慢速磁盘还是快速磁盘上安装Microsoft SQL Server?

(要清楚,无论如何我都会将我的数据库放在快速磁盘上,所以我的问题只与安装本身的位置有关)

database-administration database-performance sql-server

10
推荐指数
2
解决办法
1182
查看次数

免费的 SQL Server 工具

任何人都有最新的 SQL Server 免费管理工具列表。SQLServerCentral 上有一个论坛帖子,但它已经过时了。

请提供一个链接,因为一些供应商在隐藏免费内容方面做得很好。

sql-server

9
推荐指数
2
解决办法
928
查看次数

用于备份 SQL Server 数据库的 Powershell 命令

是否有 PowerShell 命令可以执行服务器上所有数据库的备份?

或者,我可以从 PowerShell 调用存储过程(将执行备份)?

powershell sql-server

9
推荐指数
2
解决办法
1862
查看次数

如何判断何时需要对我的 SQLServer 数据库进行碎片整理?

测量 SQLServer 数据库碎片/性能下降并确定何时对 SQLServer 数据库表进行碎片整理的最佳实践是什么?

我最感兴趣的是了解有用的指标是什么以及应该触发碎片整理的性能下降程度。

optimization defrag sql-server

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

SharePoint 数据库的最佳实践恢复模型是什么

Paul Randal问了一些关于 SharePoint SQL 数据库最佳实践的非常好的问题。今天,在帮助客户维护 SharePoint 安装时,他问了我一个关于 SharePoint 数据库的最佳 SQL 恢复模型的问题。

使用简单恢复模型是我的习惯(我不是数据库管理员 :))))。如果 SharePoint 数据库定期备份,并且您还有项目级别的 3rd 方工具备份,则您确实不需要保存整个日志。

我在这里错过了什么吗?这是正确的方法吗?您是否曾经使用过 SharePoint DB 日志来恢复您的数据?

sharepoint sql-server

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

从存储过程调用 sp_start_job

我们的开发人员需要能够从他们的 .Net 代码启动 SQL Server 代理作业。我知道我可以调用msdb..sp_start_job来做到这一点,但我不想让一般用户帐户直接访问运行作业。

我想要做的是使用 WITH EXECUTE AS 子句在应用程序的数据库中创建一个存储过程来模拟代理帐户。我们的程序是:

CREATE PROCEDURE dbo.StartAgentJob 
    WITH EXECUTE AS 'agentProxy'
AS
BEGIN
    EXEC msdb.dbo.sp_start_job N'RunThisJob';
END
Run Code Online (Sandbox Code Playgroud)

但是,当我们运行它时,我们会收到以下消息:

The EXECUTE permission was denied on the object 'sp_start_job', database 'msdb', schema 'dbo'.
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?这甚至是在 SQL2005 中执行此操作的最佳方法吗?

sql sql-server sql-server-2005

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