我有一个归档问题。
我们有一个历史数据库,用于从我们的主系统归档旧记录,并且应用程序知道查询它
但是,它变得太大了。
我想重新初始化历史数据库。我的想法是——简而言之:
关闭这个数据库,
使其只读,
将其重命名为 *old
创建一个类似的历史数据库(相同的结构/表)。
在视图/同义词的帮助下,应用程序将能够查询两个 DB 的数据,而无需更改代码。
我的问题是关于最后一部分
那行得通吗?
我可以创建视图/同义词(视图将使用 UNION ALL 查询两个表 DB),这将是默认的转到对象名称而不是实际的原始表名称?
我们的主要问题是备份,因为每天都会进行归档,我们还需要备份这个数据库,因为它是一个巨大的数据库,它是一个时间和资源的腰部。
谢谢,罗尼。
减少具有只读数据的 VLDB 备份大小的内置方法是对大表进行分区,将旧分区放在只读文件组上,然后对只读文件组(或整个数据库)进行不经常备份,结合起来定期备份读写文件组。然后你可以执行一个Piecemeal Restore。
是的,您通常可以在不更改应用程序的情况下用视图替换表,除非应用程序做了一些不寻常的事情。风险在于性能,因为跨多个数据库的 UNION ALL 视图的实际性能并不相同。
您可能只是尝试对存档数据库中的大型表使用列存储压缩。
是的,您可以为跨数据库查询创建视图/同义词。
以下是实现此功能时会想到的一些副作用:
两个数据库中两个表之间的约束/关系将不起作用。这可能会导致重复的主键、外键引用不起作用……
...
两个数据库中两个表的视图示例
在新数据库上查询这个新创建的视图
结果
替代
最好的选择是David Browne - Microsoft的答案。
如果这不是一个选项,这里是一个不太理想的解决方案:
要备份 read_write 文件组:
这导致在标准版上将其拆分为多个数据库的唯一真正优势是首先恢复非历史数据库,使其在历史数据库恢复时可供查询访问。