--1.查看所有数据库的recovery属性及当前的文件路径
--step1:check all the databses's properties and all their path
- Recovery model, log reuse wait description, log file size, log usage size ,查看所有数据库的属性
- and compatibility level for all databases on instance
SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model],
db.log_reuse_wait_desc AS [Log Reuse Wait Description],
ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],
CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS
[Log Used %], db.[compatibility_level] AS [DB Compatibility Level],
db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on,
db.is_auto_update_stats_on, db.is_auto_update_stats_async_on, db.is_parameterization_forced,
db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,
is_auto_shrink_on, is_auto_close_on
FROM sys.databases AS db WITH (NOLOCK)
INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)
ON db.name = lu.instance_name
INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK)
ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'
AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
AND ls.cntr_value > 0 OPTION (RECOMPILE);
- Things to look at:
- How many databases are on the instance?
- What recovery models are they using?
- What is the log reuse wait description?
- How full are the transaction logs?
- What compatibility level are they on?
- File Names and Paths for databases in instance
SELECT DB_NAME([database_id])AS [Database Name],
[file_id], name, physical_name, type_desc, state_desc,
CONVERT( bigint, size/128.0) AS [Total Size in MB]
FROM sys.master_files WITH (NOLOCK)
- Things to look at:
- Are data files and log files on different drives?
- Is everything on the C: drive?
- Is TempDB on dedicated drives?
- Are there multiple data files?
--step2: backup all the databases
backup database master to disk ='I:\migratebackups\master.bak'
backup database msdb to disk = 'I:\migratebackups\msdb.bak'
backup database model to disk ='I:\migratebackups\model.bak'
backup log model to disk ='I:\migratebackups\model_log.bak'
backup database partitiondbtest to disk = 'I:\migratebackups\partitiondbtest.bak'
backup log partitiondbtest to disk = 'I:\migratebackups\partitiondbtest_log.bak'
----停止service,把所有的文件都迁移或者copy到另外的磁盘, 然后重启sql server
--step1:check all the databses's properties and all their path
- Recovery model, log reuse wait description, log file size, log usage size ,查看所有数据库的属性
- and compatibility level for all databases on instance
SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model],
db.log_reuse_wait_desc AS [Log Reuse Wait Description],
ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],
CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) * 100 AS
[Log Used %], db.[compatibility_level] AS [DB Compatibility Level],
db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on,
db.is_auto_update_stats_on, db.is_auto_update_stats_async_on, db.is_parameterization_forced,
db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,
is_auto_shrink_on, is_auto_close_on
FROM sys.databases AS db WITH (NOLOCK)
INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)
ON db.name = lu.instance_name
INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK)
ON db.name = ls.instance_name
WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'
AND ls.counter_name LIKE N'Log File(s) Size (KB)%'
AND ls.cntr_value > 0 OPTION (RECOMPILE);
- Things to look at:
- How many databases are on the instance?
- What recovery models are they using?
- What is the log reuse wait description?
- How full are the transaction logs?
- What compatibility level are they on?
- File Names and Paths for databases in instance
SELECT DB_NAME([database_id])AS [Database Name],
[file_id], name, physical_name, type_desc, state_desc,
CONVERT( bigint, size/128.0) AS [Total Size in MB]
FROM sys.master_files WITH (NOLOCK)
- Things to look at:
- Are data files and log files on different drives?
- Is everything on the C: drive?
- Is TempDB on dedicated drives?
- Are there multiple data files?
--step2: backup all the databases
backup database master to disk ='I:\migratebackups\master.bak'
backup database msdb to disk = 'I:\migratebackups\msdb.bak'
backup database model to disk ='I:\migratebackups\model.bak'
backup log model to disk ='I:\migratebackups\model_log.bak'
backup database partitiondbtest to disk = 'I:\migratebackups\partitiondbtest.bak'
backup log partitiondbtest to disk = 'I:\migratebackups\partitiondbtest_log.bak'
---step3, stop sql server service, copy or migrate all the files into another drive
---step4: modify files
---4.1system files , verify path again
select name, physical_name from sys.master_files where database_id = DB_ID(N'MSDB')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'Model')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'master')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'partitiondbtest')
go
----4.2Move Msdb and Model and user dabatases
--MSDB db file
use master;
go
Alter Database MSDB
Modify File (Name = MSDBData, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\MSDBData.mdf')
GO
--MSDB Log file
ALTER DATABASE MSDB
MODIFY FILE (NAME = MSDBLog, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\MSDBLog.ldf');
GO
--MODEL db file
use master;
go
Alter Database Model
Modify File (Name = Modeldev, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Model.mdf')
GO
--MODEL log file
ALTER DATABASE Model
MODIFY FILE (NAME = Modellog, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Modellog.ldf');
GO
--partitiondbtest db file
use master;
go
Alter Database partitiondbtest
Modify File (Name = partitiondbtest, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\partitiondbtest.mdf')
GO
use master;
go
Alter Database partitiondbtest
Modify File (Name = Sale2009data, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Sale2009data.ndf')
GO
use master;
go
Alter Database partitiondbtest
Modify File (Name = Sale2010data, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Sale2010data.ndf')
GO
use master;
go
Alter Database partitiondbtest
Modify File (Name = Sale2011data, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Sale2011data.ndf')
GO
use master;
go
Alter Database partitiondbtest
Modify File (Name = Sale2012data, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Sale2012data.ndf')
GO
use master;
go
Alter Database partitiondbtest
Modify File (Name = Sale2013data, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\Sale2013data.ndf')
GO
--partitiondbtest log file
ALTER DATABASE partitiondbtest
MODIFY FILE (NAME = partitiondbtest_log, FILENAME = 'I:\MSSQL15.SQL2019TEST1\MSSQL\DATA\partitiondbtest_log.ldf');
GO
--5.check the current dabase path
select name, physical_name from sys.master_files where database_id = DB_ID(N'MSDB')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'Model')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'master')
go
select name, physical_name from sys.master_files where database_id = DB_ID(N'partitiondbtest')
go
--6.change master location in SSCM
--I:\MSSQL15.SQL2019TEST1\MSSQL\DATA
--I:\MSSQL15.SQL2019TEST1\MSSQL\Log
--7.check whether need to change reistry or not