zoukankan      html  css  js  c++  java
  • (4.16)sql server迁移DB文件(同一DB内)

    SQL Server 修改数据库物理文件存在位置

    关键词:迁移文件,迁移temp库(这怎么迁移呢,用方法2即可,需要重启实例)

     如果系统数据库参考:https://blog.51cto.com/joetang/1687913

    三种均需要离线;

    一共分为(1)脱机迁移和(2)在线迁移。

    (1)迁移方案一(脱机迁移)

    SQL Server创建新库时,默认会把数据存放在C盘中,一旦 数据库 中的存储数据多了以后,C盘的空间就会所剩无几。解决方案是将存放数据的物理文件迁移到其他盘。具体流程为:

    1、将现有的数据库脱机

    ALTER DATABASE DB1 SET OFFLINE WITH ROLLBACK IMMEDIATE;
    

    2、将数据库文件移到新的位置

    文件复制完成以后需要:右键-属性-安全-在组或用户名处添加Authenticated Users-更改该组权限为完全权限,否则接下来的操作会报

    中间可能存在的问题:

    消息 5120,级别 16,状态 101,第 17 行
    无法打开物理文件“D:MSSQLDATA	estdb.mdf”。操作系统错误 5:“5(拒绝访问。)”。
    消息 5120,级别 16,状态 101,第 17 行
    无法打开物理文件“D:MSSQLDATA	estdb _log.ldf”。操作系统错误 5:“5(拒绝访问。)”。
    消息 5181,级别 16,状态 5,第 17 行
    无法重新启动数据库“ctrip”。将恢复到以前的状态。
    消息 5069,级别 16,状态 1,第 17 行
    ALTER DATABASE 语句失败。
    

    3、修改数据库关联文件的指向

    --修改物理文件名
    ALTER
    DATABASE DB1 MODIFY FILE(NAME = DB1, FILENAME = X:SQLServerDB1.mdf); ALTER DATABASE DB1 MODIFY FILE(NAME = DB1_Log, FILENAME = X:SQLServerDB1_Log.ldf);

    -- 修改逻辑名
    ALTER DATABASE [db_tank] MODIFY FILE (NAME=N'db_tank1_data', NEWNAME=N'db_tank_data') ALTER DATABASE [db_tank] MODIFY FILE (NAME=N'db_tank1_log', NEWNAME=N'db_tank_log')

    4、将数据库进行联机

    ALTER DATABASE DB1 SET ONLINE;

     

    (2)迁移方案二(在线迁移)

      

    MS SQL 数据库迁移文件,这里说的不是将数据库迁移到另外一台服务器,只是在服务器不同磁盘目录内做迁移。移动数据库文件的情况大致有下面一些:
      1: 事先没有规划好,数据库文件或日志文件增长过快,导致某个盘或整个磁盘空间不足,需要移动数据文件或日志文件
      2: 纯粹由于业务需求,数据增长过快。
      3: 为了更好的IO的性能,需要将数据文件、日志文件分布到不同磁盘,减轻IO压力,提供IO性能。
      4:故障恢复。例如,数据库处于可疑模式或因硬件故障而关闭。
    案例:现在我在数据库实例中有数据库MyAssistant,(假设)由于事先没有规划好,导致数据文件位于E:DataBase目录下, 我们需要将数据文件移动到D:DataBase_Data目录下,
     

     
    将日志文件移动到F:DataBase_Log目录下。
    步骤1:对数据库中每个要移动的文件(数据文件/日志文件),通过下面命令指定到新的目录 
    复制代码
    --查看逻辑名
    SELECT name, physical_name
    FROM sys.master_files
    WHERE database_id = DB_ID('tempdb');
    
    --迁移位置
    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'D:	empdb	empdb.mdf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'D:	empdb	emplog.ldf');
    GO
    
    --停止服务,复制文件到指定位置
    --开启服务


    如果有多个数据库的数据文件/日志文件需要移动,可以通过一系列上述命令执行 ALTER DATABASE DATABASE_ID1 MODIFY FILE(NAME='DATABASE_NAME', FILENAME='....mdf'); ALTER DATABASE DATABASE_ID2 MODIFY FILE(NAME='DATABASE_NAME', FILENAME=.....mdf'); ....... 步骤2:
    复制代码
    将转移数据库脱机然后将数据库复制到,设定好的盘符下,如果文件名也改了,那也要改。再联机

     

     (3)迁移方案三:直接分离附加

    【1】分离

       EXEC sp_detach_db 'test'

    【2】复制文件到自己想要的位置

    【3】附加

      EXEC sp_attach_db @dbname = test', @filename1 =@data_file, @filename2 = @log_file

      EXEC sp_attach_db @dbname = test', @filename1 ='d: est est_data.mdf', @filename2 ='d: est est_log.mdf'

      

    (4)restore with move 'logic_name' to 'physics_name'

    restore move,with move恢复数据库

    USE [master]
    RESTORE DATABASE [test] 
    FROM  DISK = N'D:DBBackup	estfull.bak' WITH  FILE = 1, 
    MOVE N'test' TO N'D:MSSQL	est.mdf',  
    MOVE N'test_log' TO N'D:MSSQL	est_log.ldf',  
    NOUNLOAD,NORECOVERY , STATS = 5

     

  • 相关阅读:
    PHP实反向代理-收藏
    微信小程序实例-获取当前的地理位置、速度
    Entity Framework Core 实现读写分离
    将ASP.NET Core应用程序部署至生产环境中(CentOS7)(转)
    Centos 7防火墙firewalld开放80端口
    Asp.net Core 使用Redis存储Session
    .net core 使用Autofac依赖注入
    .net core 1.0 实现负载多服务器单点登录
    用ASP.NET Core 1.0中实现邮件发送功能-阿里云邮件推送篇
    阿里大鱼.net core 发送短信
  • 原文地址:https://www.cnblogs.com/gered/p/9643543.html
Copyright © 2011-2022 走看看