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

2023-11-29

我有一些左右的永久桌子需要每晚重建。

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

  1. 创建永久表(构建版本;例如 tbl_build_Client)

  2. 重命名活动表(tbl_Client 重命名为 tbl_Client_old)

  3. 将构建版本重命名为实时版本(tbl_build_Client 重命名为 tbl_Client)

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

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


Update

试图清除 gbn 的答案和使用同义词的建议, 这是一种理性的方法,还是我在某些方面犯了严重错误?

“Client”的三个真实表:
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 以及所有索引、约束和触发器等
  • Use synonyms隐藏真实的表,例如 Client、ClientOld、ClientToLoad
  • 要生成新表,请截断/写入“ClientToLoad”
  • Then you DROP and CREATE the synonyms in a transaction so that
    • 客户端 -> 什么是 ClientToLoad
    • 旧客户端 -> 什么是客户端
    • ClientToLoad -> ClientOld 是什么

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过重命名旧表然后填充新版本来将表停机时间降至最低? 的相关文章

  • Id 或 [TableName]Id 作为主键/实体标识符

    是否首选使用 Id 作为主键的列名或 TableName Id 作为命名约定 表 账户主键 ID 相对 表 账户主键 AccountId 在我见过的实现中 它似乎分为 50 50 左右 每种方法的优点和缺点是什么 跟进 在我的数据库中使用一
  • 递归 SQL 给出 ORA-01790

    使用 Oracle 11g 第 2 版 以下查询给出 ORA 01790 表达式必须与相应表达式具有相同的数据类型 with intervals time interval AS select trunc systimestamp from
  • 表名搜索

    我使用以下命令在特定数据库的存储过程中搜索字符串 USE DBname SELECT Name FROM sys procedures WHERE OBJECT DEFINITION OBJECT ID LIKE xxx 修改上面的内容是否
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 如何在 SELECT 子句中编写带点(“.”)的列名?

    我正在尝试使用 编写列名称 没有成功 sample SELECT PrmTable Value MAX Value FROM TempTable or SELECT MAX Value AS PrmTable Value FROM Temp
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • 恢复 SQL Server 数据库 - 主密钥未打开

    我必须制作远程 SQL Server 数据库的本地副本 我通过使用 Management Studio 中的 任务 gt 备份 来完成此操作 然后 我在本地恢复了备份 该备份似乎包含了所有内容 表 用户 对称密钥和证书 当我尝试执行需要打开
  • 使用 Spark DataFrame 获取组后所有组的 TopN

    我有一个 Spark SQL DataFrame user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 如何按用户分组然后返回TopN
  • 如何在SSRS中的表上创建热图?

    如何在 SSRS 中创建这样的内容 颜色将根据行中的值 承销商 从红色变为绿色 所有这些都在一个组中 您可以通过右键单击各个单元格并根据表达式设置填充颜色来完成此操作 In the Image below I ve mistakingly
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 如何在SSRS 2012中显示基于总金额的前10名

    我只需要显示前 10 名Class基于Total SUM Premium 柱子 我转到类代码属性组 gt 过滤器并按 SUM Net Written Premium 设置前 10 名 但它不起作用 我只需要显示前 10 名 而且总金额也应该
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 是否有适用于所有数据库的标准sql

    如下所示 不同数据库的语法有所不同 是否存在适用于所有数据库的标准方法 有没有什么工具可以将任意sql转换为任意sql SQL Server 2005 CREATE TABLE Table01 Field01 int primary key
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min

随机推荐