我们有一个Oracle12c (12.2.0.1)数据库服务器,按照Oracle的建议使用AL32UTF8 (Unicode5.0UTF-8通用字符集)字符集设置。
然而,使用此数据库的应用程序附带了供应商建议使用WE8MSWIN1252 (MSWindowsCodePage1252-8位西欧)字符集。
我知道,至少在一般情况下,如何使用Unicode的数据迁移助手或通过完整的导出/导入从一个字符集到另一个字符集。
但有两个方面我不太清楚。
其中之一是Oracle表示有可能出现数据截断问题(它解释了如何/为什么)。除了在测试中转换数据库并试图逐行比较转换的数据和未转换的数据之外,是否有任何方法可以找出这是否是我的数据库中的问题?
更重要的是,既然供应商希望我们在一个字符集中,这不是Oracle推荐的默认设置,那么是否有任何方法来度量(如果有的话)性能对转换可能产生的影响?据我所知,服务器必须在插入/更新时将传入的数据从WE8MSWIN1252字符集转换为AL32UTF8,并在selects上反转该数据,对吗?有什么观点可以让我看看数据库花在处理这些转换上的时间吗?我真的无法想象性能的影响是否足以证明这种转换是合理的,但我想肯定地知道。
发布于 2018-11-28 08:34:13
以前的csscan曾经这样做过,但是您实际运行了DMA吗?DMA对整个数据库进行扫描,然后列出将遭受有损转换的所有表。这是一个预览,在它实际进行和进行转换之前。如果您从像AL32UTF8这样的多字节字符集转到像WE8MSWIN1252这样的单字节字符集,您将有更高的丢失数据的机会。有很多原因可以解释为什么会有有损数据,其中一部分原因是多个应用程序和工具在多个操作系统上访问数据库,locale/NLS_LANG设置是否正确。如果NLS_LANG设置正确,那么oracle就会在源数据库和目标数据库之间进行单通道转换。这取决于应用程序。
Oracle确实指出使用多字节字符集有性能开销(可能是5%),但将AL32UTF8指定为缺省值,因为它涵盖了全球范围内的所有字符集。我不知道任何计算转换时间的视图;这是RDBMS的一部分。
我们个人选择数据库中的WE8MSWIN1252有两个原因:
希望这能帮上忙!
https://dba.stackexchange.com/questions/223554
复制相似问题