4

我正在使用 RoundhouseE 来管理数据库迁移,并且由于旧版 git 配置错误,脚本已提交给 git,但行尾不一致。我想规范化这些行尾,当然,这样做 RoundhouseE 会检测到这些文件的哈希更改。

从 RoundhouseE 的角度来看,我接受这是正确的行为,但我不确定补救的最佳途径。我们已经在生产数据库。

我有点不知所措,所以到目前为止还没有做太多的研究,很高兴与有经验的人在评论中讨论。


选项1

首先提交一个 UPDATE 脚本,该脚本将 [RoundhouseE].[ScriptsRun] 哈希表引导到已更改的新一次性脚本的正确哈希。然后提交一次性脚本。我真的不喜欢这种方法,感觉又脏又笨。

4

3 回答 3

4

你想使用 --warnandignoreononetimescriptchanges

WarnAndIgnoreOnOneTimeScriptChanges - 指示 RH 忽略并更新以前针对数据库运行而不是失败的已更改一次性脚本(Up 文件夹中的 DDL/DML)的哈希值。每次重新运行的一次性脚本都会记录一个警告。默认为假。

第一次运行将产生以下输出:

21-Apr-2020 22:23:52    2019-12-17_1100_SomeScript.sql is a one time script that has changed since it was run. build    
21-Apr-2020 22:23:43    BASELINING: Recording 2019-12-17_1100_SomeScript.sql on 10.0.0.14,1433 - DATABASENAME.

随后的运行将显示“已跳过”。

于 2020-04-21T22:32:57.040 回答
3

有两个命令行选项可能会有所帮助:WarnOnOneTimeScriptChanges结合Baseline.

-w, --warnononetimescriptchanges | WarnOnOneTimeScriptChanges - 指示 RH 执行已更改的一次性脚本(Up 文件夹中的 DDL/DML),这些脚本之前已针对数据库运行而不是失败。每次重新运行的脚本都会记录一个警告。默认为假。

此选项将执行您的迁移,这可能不是您想要的。这就是为什么您还应该指定 --baseline。

--基线 | 基线 - 这指示 RH 为其记录表创建插入,但实际上不对数据库运行任何操作。如果您已经拥有通过其他方式运行的脚本(并且在您启动新的之前),请使用此选项。

我还没有尝试过,但是这两个开关应该一起记录新的脚本哈希而不实际执行任何操作。

于 2016-04-01T12:58:31.360 回答
0

尽管其他答案中记录的解决方案是完全正确的,但如果您有进入云的管道正在运行迁移,则通常很难使用额外的标志运行 RoundhouseE。RoundhouseE 跟踪它运行了哪些脚本,并将 SQL 文件内容和它的哈希存储在roundhouse名为scriptsrun. 因此,如果您删除相关脚本的行,RoundhouseE 不知道该脚本曾经运行过。您需要做的就是:

  1. 使用 SQL 工具连接数据库
  2. 运行以下 SQL 命令以删除记录:

delete from roundhouse.scriptsrun where script_name = 'my_script_name.sql';

  • 注意 1:这不是处理生产系统的合适解决方案,但作为开发过程的一部分工作得很好。
  • 注意2:如果您之前运行过一个脚本并删除RoundhouseE的记录,建议您撤消该脚本执行的操作以避免错误匹配状态。
于 2022-02-17T10:57:01.877 回答