我正在使用AWS Database Migration Service(DMS)创建复制任务。我注意到在TaskSettings JSON中有一个名为CharacterSetSettings
的属性。但是,似乎没有有关此属性的文档。
我尝试在文档和Google中搜索该属性,但没有出现。
[任务设置JSON:
{
"TargetMetadata": {
"TargetSchema": "",
"SupportLobs": true,
"FullLobMode": false,
"LobChunkSize": 0,
"LimitedSizeLobMode": true,
"LobMaxSize": 256,
"InlineLobMaxSize": 0,
"LoadMaxFileSize": 0,
"ParallelLoadThreads": 0,
"ParallelLoadBufferSize": 0,
"BatchApplyEnabled": false,
"TaskRecoveryTableEnabled": false
},
"FullLoadSettings": {
"TargetTablePrepMode": "TRUNCATE_BEFORE_LOAD",
"CreatePkAfterFullLoad": false,
"StopTaskCachedChangesApplied": false,
"StopTaskCachedChangesNotApplied": false,
"MaxFullLoadSubTasks": 8,
"TransactionConsistencyTimeout": 1000,
"CommitRate": 10000
},
"Logging": {
"EnableLogging": true,
"LogComponents": [
{
"Id": "SOURCE_UNLOAD",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TARGET_LOAD",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "SOURCE_CAPTURE",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TARGET_APPLY",
"Severity": "LOGGER_SEVERITY_DEFAULT"
},
{
"Id": "TASK_MANAGER",
"Severity": "LOGGER_SEVERITY_DEFAULT"
}
],
"CloudWatchLogGroup": "dms-tasks-altitude-staging-to-prod-instance",
"CloudWatchLogStream": "dms-task-RU2FBO6SGUASAODLXHJ63OYDAM"
},
"ControlTablesSettings": {
"historyTimeslotInMinutes": 5,
"ControlSchema": "control",
"HistoryTimeslotInMinutes": 5,
"HistoryTableEnabled": true,
"SuspendedTablesTableEnabled": true,
"StatusTableEnabled": true
},
"StreamBufferSettings": {
"StreamBufferCount": 3,
"StreamBufferSizeInMB": 8,
"CtrlStreamBufferSizeInMB": 5
},
"ChangeProcessingDdlHandlingPolicy": {
"HandleSourceTableDropped": true,
"HandleSourceTableTruncated": true,
"HandleSourceTableAltered": true
},
"ErrorBehavior": {
"DataErrorPolicy": "LOG_ERROR",
"DataTruncationErrorPolicy": "LOG_ERROR",
"DataErrorEscalationPolicy": "SUSPEND_TABLE",
"DataErrorEscalationCount": 0,
"TableErrorPolicy": "SUSPEND_TABLE",
"TableErrorEscalationPolicy": "STOP_TASK",
"TableErrorEscalationCount": 0,
"RecoverableErrorCount": -1,
"RecoverableErrorInterval": 5,
"RecoverableErrorThrottling": true,
"RecoverableErrorThrottlingMax": 1800,
"ApplyErrorDeletePolicy": "IGNORE_RECORD",
"ApplyErrorInsertPolicy": "LOG_ERROR",
"ApplyErrorUpdatePolicy": "LOG_ERROR",
"ApplyErrorEscalationPolicy": "LOG_ERROR",
"ApplyErrorEscalationCount": 0,
"ApplyErrorFailOnTruncationDdl": false,
"FullLoadIgnoreConflicts": true,
"FailOnTransactionConsistencyBreached": false,
"FailOnNoTablesCaptured": false
},
"ChangeProcessingTuning": {
"BatchApplyPreserveTransaction": true,
"BatchApplyTimeoutMin": 1,
"BatchApplyTimeoutMax": 30,
"BatchApplyMemoryLimit": 500,
"BatchSplitSize": 0,
"MinTransactionSize": 1000,
"CommitTimeout": 1,
"MemoryLimitTotal": 1024,
"MemoryKeepTime": 60,
"StatementCacheSize": 50
},
"ValidationSettings": {
"EnableValidation": true,
"ValidationMode": "ROW_LEVEL",
"ThreadCount": 5,
"PartitionSize": 10000,
"FailureMaxCount": 10000,
"RecordFailureDelayInMinutes": 5,
"RecordSuspendDelayInMinutes": 30,
"MaxKeyColumnSize": 8096,
"TableFailureMaxCount": 1000,
"ValidationOnly": false,
"HandleCollationDiff": false,
"RecordFailureDelayLimitInMinutes": 0
},
"PostProcessingRules": null,
"CharacterSetSettings": null
}
CharacterSetSettings
上应该有文档。我希望文档会在Specifying Task Settings for AWS Database Migration Service Tasks - AWS Database Migration Service上列出。
我认为您正在搜索Character Substitution Task Settings。
您可以指定复制任务在目标数据库上对所有具有AWS DMS STRING或WSTRING数据类型的源数据库列执行字符替换。您可以使用以下源数据库和目标数据库中的端点为任何任务配置字符替换:
源数据库:
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,SAP Adaptive Server Enterprise(ASE)和IBM Db2 LUW
目标数据库:]
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,SAP Adaptive Server Enterprise(ASE)和Amazon Redshift
[注: AWS DMS在3.1.3版和更高版本中支持字符替换。
您可以在任务设置中使用CharacterSetSettings
参数指定字符替换。对于使用Unicode代码点值以十六进制表示法指定的字符,将发生这些字符替换。如果同时指定了两个阶段,则可以按照以下顺序在两个阶段中实现替换:
单个字符替换:] >>
AWS DMS可以用目标上相应字符的指定替换值替换源上所选字符的值。使用CharacterReplacements
中的CharacterSetSettings
数组选择具有您指定的Unicode代码点的所有源字符。使用此数组还可以为目标上的相应字符指定替换代码点。
要选择源上具有给定代码点的所有字符,请将SourceCharacterCodePoint
数组中的CharacterReplacements
实例设置为该代码点。然后,通过在此数组中设置TargetCharacterCodePoint
的相应实例,为所有等效目标字符指定替换代码点。要删除而不是替换目标字符,请将TargetCharacterCodePoint
的适当实例设置为零(0)。通过在SourceCharacterCodePoint
数组中指定其他TargetCharacterCodePoint
和CharacterReplacements
设置对,可以根据需要替换或删除许多不同的目标字符值。如果为SourceCharacterCodePoint
的多个实例指定相同的值,则TargetCharacterCodePoint
的最后对应设置的值将应用于目标。
例如,假设您为CharacterReplacements
指定以下值。
"CharacterSetSettings": { "CharacterReplacements": [ { "SourceCharacterCodePoint": 62, "TargetCharacterCodePoint": 61 }, { "SourceCharacterCodePoint": 42, "TargetCharacterCodePoint": 41 } ] }
[在此示例中,AWS DMS将目标上源代码点十六进制值62的所有字符替换为代码点值61。代码点值41。换句话说,AWS DMS将目标上字母“ b”的所有实例替换为字母“ a”。同样,AWS DMS将目标上字母“ B”的所有实例替换为字母“ A”。
字符集验证和替换:
完成任何单个字符替换后,AWS DMS可以验证并确保所有目标字符在您指定的单个字符集中具有有效的Unicode代码点。您可以使用CharacterSetSupport
中的CharacterSetSettings
配置此目标字符验证和修改。要指定验证字符集,请将CharacterSet
中的CharacterSetSupport
设置为字符集的字符串值。您可以通过以下一种方式让AWS DMS修改无效的目标字符:
为所有无效目标字符指定一个替换的Unicode代码点,而不管其当前代码点如何。要配置此替换代码点,请将ReplaceWithCharacterCodePoint
中的CharacterSetSupport
设置为指定值。
通过将ReplaceWithCharacterCodePoint
设置为零(0),配置所有无效目标字符的删除。
例如,假设您为CharacterSetSupport
指定以下值。
"CharacterSetSettings": { "CharacterSetSupport": { "CharacterSet": "UTF16_PlatformEndian", "ReplaceWithCharacterCodePoint": 0 } }
[在此示例中,AWS DMS删除在目标上找到的在“
UTF16_PlatformEndian
”字符集中无效的任何字符。因此,将删除用十六进制值2FB6指定的所有字符。此值无效,因为它是4字节Unicode代码点,并且UTF16字符集仅接受具有2字节代码点的字符。
注:
在开始通过表映射指定的任何全局或表级转换之前,复制任务将完成所有指定的字符替换。