我的 SQL Server 2008 R2 有 323 个数据库,在我的 C: 驱动器上消耗了大约 14 GB,这是一个快速的 SSD。
因为我想回收 C: 驱动器上的一些空间,所以我想将它们移动到我的 D: 驱动器。
我找到了这篇 MSDN 文章,但这似乎是只移动一个数据库的过程。
是否有自动方式或脚本一次移动我的所有数据库?
尝试使用以下命令镜像数据库时
ALTER AVAILABILITY GROUP SQLAlwaysonGroup ADD DATABASE test0916aj8CJ
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
消息 1475,级别 16,状态 105,第 1 行
数据库“test0916aj8CJ”可能包含尚未备份的批量记录更改。在主体数据库或主数据库上进行日志备份。然后在镜像数据库上还原此备份以启用数据库镜像,或在每个辅助数据库上还原此备份以使其能够加入可用性组。
这可以在不支持数据库的情况下完成吗?或者我应该备份然后丢弃备份。它用于新创建的数据库,因此此时我不需要备份。
我尝试了以下...
BACKUP
DATABASE [test0916aj8CJ] TO DISK = N’NUL’
WITH COPY_ONLY, NOFORMAT, INIT,
NAME = N’test-Full Database Backup’,
SKIP, NOREWIND, NOUNLOAD
GO
Run Code Online (Sandbox Code Playgroud)
但上述方法也不起作用。
谢谢
我特别想要一种可编程方式来更改服务器上所有数据库的恢复模型,并且我知道此解决方案可以应用于所有“更改数据库”命令。虽然我知道 PowerShell 中的 SMO 可以很容易地解决这个问题:
Import-Module SQLPS
CD SQL\*ServerName*\*InstanceName*\databases
foreach ($database in (ls -force)){
$database.recoverymodel = 'Full'
$database.update
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找最有效的 T-SQL 解决方案。不惜一切代价避免使用游标已经在我的脑海中根深蒂固,但是我想不出基于集合的解决方案来执行更改语句。这是基于游标的解决方案。
DECLARE @sql varchar(MAX), @name varchar(50)
DECLARE cur CURSOR FOR
SELECT name
FROM sys.databases
where name <> 'tempdb';
OPEN cur
FETCH NEXT FROM cur
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER DATABASE ' + @name + ' SET RECOVERY FULL;'
exec(@sql)
FETCH NEXT FROM cur INTO @name
END
CLOSE CUR
DEALLOCATE cur
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 安装过程中,我“认为”我将 tempdb 的位置指定在“F:”而不是“C:”上,但我可以看到,虽然 tempdb.mdf 和 templog.ldf 位于“F:”上,但 3 。 ndf 辅助数据文件位于“C:”上。
我正在考虑通过执行以下步骤来移动 .ndf 文件:
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp2 , FILENAME = 'F:\MSSQLData\temp2' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp3 , FILENAME = 'F:\MSSQLData\temp3' )
ALTER DATABASE tempdb MODIFY FILE ( NAME = temp4 , FILENAME = 'F:\MSSQLData\temp4' )
Run Code Online (Sandbox Code Playgroud)
SELECT name, physical_name AS …
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个“部署”用户,除了选择、更新、插入和删除记录之外,它还可以在现有数据库上创建和更改表。
这是我到目前为止所尝试过的:
-- Create deployment user
CREATE ROLE deploy_user WITH LOGIN PASSWORD 'deploy_user';
-- Grant connect and create
GRANT CONNECT, CREATE ON DATABASE my_database TO deploy_user;
-- Grant create schema privilege
ALTER ROLE deploy_user CREATEDB;
-- Change db owner to deployment user
ALTER DATABASE my_database OWNER TO deploy_user;
-- Grant CRUD operations
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT INSERT, UPDATE, DELETE ON TABLES TO deploy_user;
Run Code Online (Sandbox Code Playgroud)
上述补助金均无效。我最终得到的是一个可以登录的用户,但仅此而已。我无法在任何表上选择、插入、更新、删除。我也无法更改架构。
有人可以帮忙吗?
sql-server ×4
performance ×1
permissions ×1
postgresql ×1
powershell ×1
smo ×1
t-sql ×1
tempdb ×1