• (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

     

  • 相关阅读:
    linux 短信收发
    sama5d3 环境检测 adc测试
    【Codeforces 723C】Polycarp at the Radio 贪心
    【Codeforces 723B】Text Document Analysis 模拟
    【USACO 2.2】Preface Numbering (找规律)
    【Codeforces 722C】Destroying Array (数据结构、set)
    【USACO 2.1】Hamming Codes
    【USACO 2.1】Healthy Holsteins
    【USACO 2.1】Sorting A Three-Valued Sequence
    【USACO 2.1】Ordered Fractions
  • 原文地址:https://www.cnblogs.com/gered/p/9643543.html
Copyright © 2020-2023  润新知