gpt4 book ai didi

sql - 通过重命名旧表,然后填充新版本,将表停机时间降至最低?

转载 作者:行者123 更新时间:2023-12-04 14:22:43 25 4
gpt4 key购买 nike

我有一些需要每晚重建的永久性 table 。

为了让这些表尽可能长时间地“存活”,并提供仅备份前一天数据的可能性,另一位开发人员含糊地建议
当夜间构建发生时,采用与此类似的路线:

  • 创建一个永久表(构建版本;例如,tbl_build_Client)
  • 重命名事件表(tbl_Client 被重命名为 tbl_Client_old)
  • 将构建版本重命名为实时版本(tbl_build_Client 被重命名为 tbl_Client)

  • 要重命名表,将使用 sp_rename。
    http://msdn.microsoft.com/en-us/library/ms188351.aspx

    你有没有看到更有效的方法来解决这个问题,
    或者这种方法有什么严重的缺陷?提前致谢。

    更新

    试图清除 gbn 的回答和使用同义词的建议,
    这是一种合理的方法,还是我的某些部分严重错误?

    “客户端”的三个真实表:
    1. dbo.build_Client
    2. dbo.hold_Client
    3. dbo.prev_Client

    因为“Client”是其他过程引用“Client”数据的方式,所以默认同义词是
    CREATE SYNONYM         Client  
    FOR dbo.hold_Client

    然后采取这些步骤来刷新数据,同时保持不间断访问。
    (1.a.) TRUNCATE dbo.prev_Client (它有昨天的数据)
    (1.b.) INSERT INTO dbo.prev_Client来自 dbo.build_Client 的记录,因为 dbo.build_Client 仍然有昨天的数据

    (2.a.) TRUNCATE dbo.build_Client(2.b.) INSERT INTO dbo.build_Client来自新数据构建过程的新数据构建
    (2.c.) 改变同义词
    DROP SYNONYM           Client
    CREATE SYNONYM Client
    FOR dbo.build_Client

    (3.a.) TRUNCATE dbo.hold_Client(3.b.) INSERT INTO dbo.hold_Client来自 dbo.build_Client 的记录
    (3.c.) 改变同义词
    DROP SYNONYM          Client
    CREATE SYNONYM Client
    FOR dbo.hold_Client

    最佳答案

    使用间接避免直接操作表:

  • 有 3 个表:Client1、Client2、Client3 以及所有索引、约束和触发器等
  • 使用 synonyms隐藏真实表,例如 Client、ClientOld、ClientToLoad
  • 要生成新表,请截断/写入“ClientToLoad”
  • 然后在事务中删除并创建同义词,以便
  • 客户端 -> 什么是 ClientToLoad
  • ClientOld -> 什么是 Client
  • ClientToLoad -> ClientOld 是什么

  • 您可以使用 SELECT base_object_name FROM sys.synonyms WHERE name = 'Client'找出当前的间接地址是什么

    这适用于所有版本的 SQL Server:另一种方式是“分区切换”,需要企业版

    关于sql - 通过重命名旧表,然后填充新版本,将表停机时间降至最低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853327/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com