设为首页 收藏本站
查看: 618|回复: 0

[经验分享] SQL Server 移动数据库

[复制链接]

尚未签到

发表于 2016-10-30 00:16:41 | 显示全部楼层 |阅读模式
  
  移动系统数据库在下列情况下可能很有用:


  •   故障恢复。例如,数据库处于可疑模式下或因硬件故障而关闭。

  •   计划的重定位。

  •   为预定的磁盘维护操作而进行的重定位。

  下列过程适用于在同一 SQL Server 实例内移动数据库文件。若要将数据库移动另一个 SQL Server 实例中或另一台服务器上,请使用备份和还原分离和附加操作。
  本主题中的过程需要数据库文件的逻辑名称。若要获取该名称,请在sys.master_files目录视图中查询名称列。
  

预先安排的重定位与预定的磁盘维护过程


  若要将移动系统数据库数据或日志文件的操作作为预先安排的重定位或预定的维护操作的一部分,请执行下列步骤。此过程适用于除 master 和 Resource 数据库以外的所有系统数据库。


  •   对于要移动的每个文件,请运行以下语句。

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' )
  •   停止 SQL Server 实例或关闭系统以执行维护。有关详细信息,请参阅停止服务

  •   将文件移动到新位置。

  •   重新启动 SQL Server 实例或服务器。有关详细信息,请参阅启动和重新启动服务

  •   通过运行以下查询来验证文件更改。
      

    SELECT  name ,physical_name AS CurrentLocation ,state_desc
    FROM    sys.master_files
    WHERE   database_id = DB_ID(N'<database_name>') ;

      

  如果移动了 msdb 数据库并为数据库邮件配置了 SQL Server 实例,则请完成下列附加步骤。


  •   通过运行以下查询,验证是否已为 msdb 数据库启用 Service Broker。
      

    SELECT  is_broker_enabled
    FROM    sys.databases
    WHERE   name = N'msdb' ;

      
      有关启用 Service Broker 的详细信息,请参阅ALTER DATABASE (Transact-SQL)

  •   通过发送测试邮件验证数据库邮件是否正常运行。有关详细信息,请参阅对数据库邮件进行故障排除




故障恢复过程




  如果由于硬件故障而必须移动文件,则请执行下列步骤,将文件重新定位到一个新位置。此过程适用于除 master 和 Resource 数据库以外的所有系统数据库。


重要提示


  如果数据库无法启动,即处于可疑模式下或处于未恢复状态,则只有 sysadmin 固定角色的成员才可以移动该文件。






  •   如果启动了 SQL Server 实例,则将其停止。

  •   通过在命令提示符下输入下列命令之一,在仅 master 恢复模式下启动 SQL Server 实例。在这些命令中指定的参数区分大小写。如果未按所示方式指定参数,则命令会失败。

    •   对于默认的 (MSSQLSERVER) 实例,请运行以下命令:



      NET START MSSQLSERVER /f /T3608
    •   对于命名实例,请运行以下命令:



      NET START MSSQL$instancename /f /T3608
      有关详细信息,请参阅如何启动 SQL Server 实例(net 命令)


  •   对于要移动的每个文件,请使用sqlcmd命令或 SQL Server Management Studio 运行以下语句。



    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' )






      有关使用sqlcmd实用工具的详细信息,请参阅使用 sqlcmd 实用工具

  •   退出sqlcmd实用工具或 SQL Server Management Studio。

  •   停止 SQL Server 实例。例如,运行NET STOP MSSQLSERVER。

  •   将文件移动到新位置。

  •   重新启动 SQL Server 实例。例如,运行NET START MSSQLSERVER。

  •   通过运行以下查询来验证文件更改。



    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');





移动
master 数据库





  若要移动 master 数据库,请按下列步骤进行操作。


  •   在“开始”菜单中,依次指向“所有程序”Microsoft SQL Server“配置工具”,再单击SQL
    Server 配置管理器


  •   在“SQL Server 服务”节点中,右键单击 SQL Server 实例(如SQL Server (MSSQLSERVER)),并选择“属性”

  •   在“SQL Server (实例名) 属性”对话框中,单击“高级”选项卡。

  •   编辑“引导参数”值以指向 master 数据库数据和日志文件的计划位置,然后单击“确定”。可以选择移动错误日志文件。
      数据文件的参数值必须跟在-d参数的后面,日志文件的参数值必须跟在-l参数的后面。下面的示例显示 master 数据和日志文件默认位置的参数值。



    -dC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\
    master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\
    LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\
    DATA\mastlog.ldf






      如果 master 数据和日志文件预先安排的重定位是E:\SQLData,则参数值将更改为:



    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
  •   通过右键单击实例名称并选择“停止”,停止 SQL Server 实例。

  •   将 master.mdf 和 mastlog.ldf 文件移动到新位置。

  •   重新启动 SQL Server 实例。

  •   通过运行以下查询,验证 master 数据库的文件更改。



    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO





移动
Resource 数据库





  Resource 数据库的位置为 <drive>:\Program Files\Microsoft SQL Server\MSSQL10_50.<instance_name>\MSSQL\Binn\。无法移动该数据库。





示例





A. 移动 tempdb 数据库
  下面的示例将tempdb数据和日志文件移动到一个新位置,作为预先安排的重定位的一部分。


注意


  由于每次启动 SQL Server 实例时都将重新创建 tempdb,所以不必实际移动数据和日志文件。在步骤 3 中重新启动服务时,将在新位置中创建这些文件。在重新启动服务之前,tempdb 将继续使用现有位置中的数据和日志文件。






  •   确定tempdb数据库的逻辑文件名称以及在磁盘上的当前位置。



    SELECT name, physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
  •   使用ALTER DATABASE更改每个文件的位置。



    USE master;
    GO
    ALTER DATABASE tempdb
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE tempdb
    MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
  •   停止再重新启动 SQL Server 的实例。

  •   验证文件更改。



    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
  •   将tempdb.mdf和templog.ldf文件从其原始位置删除。
      

      

      
      在 SQL Server 中,通过在ALTER DATABASE语句的 FILENAME 子句中指定新的文件位置,可以将用户数据库中的数据、日志和全文目录文件移动到新位置。此方法适用于在同一 SQL Server 实例中移动数据库文件。若要将数据库移动到另一个 SQL Server
    实例或另一台服务器上,请使用备份和还原分离和附加操作


    注意


      SQL Server 数据库引擎的某些功能改变了数据库引擎在数据库文件中存储信息的方式。这些功能仅限于特定的 SQL Server 版本。不能将包含这些功能的数据库移到不支持这些功能的 SQL Server 版本。使用 sys.dm_db_persisted_sku_features 动态管理视图可列出当前数据库中启用的所有特定于版本的功能。




      本主题中的过程需要数据库文件的逻辑名称。若要获取该名称,请在sys.master_files目录视图中查询名称列。


    注意


      将数据库移动到另一个服务器实例上时,若要为用户和应用程序提供一致的体验,您可能需要为数据库重新创建部分或全部元数据。有关详细信息,请参阅当数据库在其他服务器实例上可用时管理元数据







    计划的重定位过程




      若要将移动数据或日志文件作为计划的重定位的一部分,请执行下列步骤:

    •   运行以下语句。
        

      ALTER DATABASE database_name SET OFFLINE ;

        

    •   将文件移动到新位置。

    •   对于已移动的每个文件,请运行以下语句。
        

      ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' ) ;

        

    •   运行以下语句。



      ALTER DATABASE database_name SET ONLINE ;
    •   通过运行以下查询来验证文件更改。



      SELECT  name ,
      physical_name AS CurrentLocation ,
      state_desc
      FROM    sys.master_files
      WHERE   database_id = DB_ID(N'<database_name>') ;





    计划的磁盘维护的重定位




      若要将重定位文件作为计划的磁盘维护过程的一部分,请执行下列步骤:


    •   对于要移动的每个文件,请运行以下语句。



      ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );
    •   停止 SQL Server 实例或关闭系统以执行维护。有关详细信息,请参阅停止服务

    •   将文件移动到新位置。

    •   重新启动 SQL Server 实例或服务器。有关详细信息,请参阅启动和重新启动服务

    •   通过运行以下查询来验证文件更改。



      SELECT  name ,
      physical_name AS CurrentLocation ,
      state_desc
      FROM    sys.master_files
      WHERE   database_id = DB_ID(N'<database_name>') ;





    故障恢复过程




      如果由于硬件故障而必须移动文件,则请执行下列步骤,将文件重新定位到一个新位置。


    重要提示


      如果数据库无法启动,即处于可疑模式下或处于未恢复状态,则只有 sysadmin 固定角色的成员才可以移动该文件。






    •   如果启动了 SQL Server 实例,则将其停止。

    •   通过在命令提示符下输入下列命令之一,在仅 master 恢复模式下启动 SQL Server 实例。

      •   对于默认的 (MSSQLSERVER) 实例,请运行以下命令。
          

        NET START MSSQLSERVER /f /T3608

          

      •   对于命名实例,请运行以下命令。



        NET START MSSQL$instancename /f /T3608
        有关详细信息,请参阅如何启动 SQL Server 实例(net 命令)


    •   对于要移动的每个文件,请使用sqlcmd命令或 SQL Server Management Studio 运行以下语句。



      ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );






        有关如何使用sqlcmd实用工具的详细信息,请参阅使用 sqlcmd 实用工具

    •   退出sqlcmd实用工具或 SQL Server Management Studio。

    •   停止 SQL Server 实例。

    •   将文件移动到新位置。

    •   启动 SQL Server 实例。例如,运行NET START MSSQLSERVER。

    •   通过运行以下查询来验证文件更改。SELECT name, physical_name AS CurrentLocation, state_desc

      FROM sys.master_files
      WHERE database_id = DB_ID(N'<database_name>');





    移动全文目录




      若要移动全文目录,请执行下列步骤。请注意,指定新的目录位置时,只指定new_path,而不是指定new_path/os_file_name。


    •   运行以下语句。



      ALTER DATABASE database_name SET OFFLINE
    •   将全文目录移动到新位置。

    •   运行下列语句,其中:logical_name是sys.database_files中 name 列的值,new_path是目录的新位置。



      ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path');
    •   运行以下语句。



      ALTER DATABASE database_name SET ONLINE;
      另外,也可以使用 CREATE DATABASE 语句的 FOR ATTACH 子句移动全文目录。下面的示例在 AdventureWorks2008R2 数据库中创建一个全文目录。若要将全文目录移动到新位置,请分离 AdventureWorks2008R2 数据库,并将全文目录从物理意义上移动到新位置。然后附加数据库,并指定全文目录的新位置。



    USE AdventureWorks2008R2 ;
    CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT ;
    GO
    USE master ;
    GO
    --Detach the AdventureWorks2008R2 database.
    sp_detach_db AdventureWorks2008R2 ;
    GO
    --Physically move the full-text catalog to the new location.
    --Attach the AdventureWorks2008R2 database and specify the new location of the full-text catalog.
    CREATE DATABASE AdventureWorks2008R2 ON
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_Data.mdf'),
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Data\AdventureWorks2008R2_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat') FOR ATTACH ;
    GO











    示例




      下面的示例将 AdventureWorks2008R2 日志文件移动到一个新位置,作为计划的重定位的一部分。



    USE master ;
    GO
    -- Return the logical file name.
    SELECT  name ,
    physical_name AS CurrentLocation ,
    state_desc
    FROM    sys.master_files
    WHERE   database_id = DB_ID(N'AdventureWorks2008R2')
    AND type_desc = N'LOG' ;
    GO
    ALTER DATABASE AdventureWorks2008R2 SET OFFLINE ;
    GO
    -- Physically move the file to a new location.
    -- In the following statement, modify the path specified in FILENAME to
    -- the new location of the file on your server.
    ALTER DATABASE AdventureWorks2008R2
    MODIFY FILE ( NAME = AdventureWorks2008R2_Log,
    FILENAME = 'C:\NewLoc\AdventureWorks2008R2_Log.ldf') ;
    GO
    ALTER DATABASE AdventureWorks2008R2 SET ONLINE ;
    GO
    --Verify the new location.
    SELECT  name ,
    physical_name AS CurrentLocation ,
    state_desc
    FROM    sys.master_files
    WHERE   database_id = DB_ID(N'AdventureWorks2008R2')
    AND type_desc = N'LOG' ;










      




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-292906-1-1.html 上篇帖子: 三.Sql server 插入语句 下篇帖子: myeclipse连接SQL server 2012
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表