SQL数据同步功能-2个SQL Azure数据库(集线器和成员数据库)之间的刷新架构麻烦

时间:2018-12-10 17:43:56

标签: sql azure azure-sql-server azure-data-sync

议程:我们希望实现一种方案,我们应该能够将生产 SQL azure DB 中推送的所有数据同步到 Test SQL Azure DB [通过SQL Azure中的“同步到其他数据库”功能托管在相同的SQL服务器下。

错误:“带有'。'的数据库对象名称。或']'或'['不支持 [![Azure SQL数据同步功能中的错误日志]

**限制:**

  • 对象(数据库,表和列)的名称不能包含可打印字符句点(。),左方括号([)或右方括号(])。
  • 不支持名称相同但架构不同的表(例如dbo.customers和sales.customers)。

来源:https://docs.microsoft.com/en-us/azure/sql-database/sql-database-sync-data

问题:通常,几乎所有数据库的架构都与 dem.customer_table 等非常相似。我们的dB也是如此。

询问:

  

我们可以使用任何技巧来成功注册   同步服务?

预先感谢!

2 个答案:

答案 0 :(得分:0)

带下划线的表名很好。 您确定了造成问题的人吗?数据库名称可以吗?几张带有禁止字符的表?

在不同架构下,没有相同表名的替代方法。

您是否考虑过地理复制功能?您可以对同一区域启用地理复制。

您还可以使用Azure自动化来自动化每日数据库副本。

答案 1 :(得分:0)

使用以下skript,您可以用“。”标识表或列。或'['或']'

--Tables
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_CATALOG='NameDB'
and 
(
TABLE_NAME like '%.%' or
TABLE_NAME like '%[%' or
TABLE_NAME like '%]%'
)

--Columns
SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
            ,*
FROM sys.columns c
JOIN sys.tables  t   ON c.object_id = t.object_id
WHERE
c.name like '%.%'
or c.name like '%[%'
or c.name like '%]%'
ORDER BY    TableName
            ,ColumnName

我们面临着同样的问题。我们删除了SyncUser的sysadmin角色,仅在所需的表上限制了模式的权限。这样,我们排除了导致表出现问题的可能性。您还可以在指定对象上拒绝选择。

在AzurePortal中加载架构之后,可以再次向您的用户授予SysAdmin。否则,他无法使用所需的帮助表来创建needet模式。 您还可以在数据库下的“安全性”下,对由Sync本身“ DataSync”创建的架构授予高级权限。

对我们有用。