Соответствие типов oracle и ms sql
Типы баз данных Oracle отличаются от SQL Server типов баз данных. При преобразовании объектов базы данных Oracle в SQL Server объекты необходимо указать, как сопоставлять типы данных из Oracle с SQL Server . Можно принять сопоставления типов данных по умолчанию или настроить сопоставления, как показано в следующих разделах.
Вопросы сопоставления типов данных
При репликации данных из базы данных Oracle нужно помнить о следующих особенностях типов данных.
Типы FLOAT и NUMBER
Масштаб и точность, задаваемые при сопоставлении типов данных FLOAT и NUMBER, зависят от масштаба и точности, указанных для столбца, использующего этот тип данных в базе данных Oracle. Точность представляет собой количество цифр в числе. Масштаб представляет собой количество цифр справа от десятичной запятой в числе. Например, у числа 123,45 точность равна 5, а масштаб равен 2.
Oracle позволяет определять числа, имеющие масштаб больший, чем точность, например NUMBER(4,5), в то время как SQL Server требует, чтобы точность была не меньше масштаба. Чтобы исключить усечение данных, когда в данных издателя Oracle масштаб больше, чем точность, при преобразовании данных точность приравнивается к масштабу: тип данных NUMBER(4,5) преобразуется в NUMERIC(5,5).
Если для типа NUMBER не указать масштаб и точность, SQL Server будет использовать по умолчанию максимальные масштаб (8) и точность (38). Для оптимизации хранения данных и производительности при репликации данных рекомендуется установить специальные значения масштаба и точности в Oracle.
Неподдерживаемые типы данных
Следующие типы данных не поддерживаются; столбцы, имеющие эти типы, невозможно реплицировать.
Столбцы, использующие REF
Указание альтернативных сопоставлений типов данных
Обычно целесообразно использовать сопоставление типов данных по умолчанию, но для многих типов данных Oracle вместо сопоставления по умолчанию можно выбрать тип данных из набора альтернативных вариантов. Существует два способа указания альтернативных сопоставлений:
Переопределяйте значения по умолчанию для каждой статьи отдельно, используя хранимые процедуры или мастер создания публикаций.
Глобальная замена значений по умолчанию для всех последующих статей с помощью хранимых процедур (значения по умолчанию для существующих статей не изменяются).
Чтобы указать альтернативные сопоставления типов данных, см. раздел Указание сопоставления типов данных для издателя Oracle.
В данном разделе описывается указание сопоставления типов данных для издателя Oracle в SQL Server с помощью среды SQL Server Management Studio или Transact-SQL. Хотя в списке для издателей Oracle имеется набор сопоставлений типов данных, для отдельных публикаций может потребоваться создание дополнительных сопоставлений.
В этом разделе
Для указания сопоставления типов данных для издателя Oracle используется:
Параметры
В следующей таблице показаны параметры вкладки Сопоставление типов .
Исходный тип
Сопоставленный тип данных Oracle.
Тип целевого объекта
Целевой SQL Server тип данных для указанного типа данных Oracle.
См. таблицы в следующем разделе для сопоставления типов SSMA по умолчанию для Oracle.
Добавление
Нажмите, чтобы добавить тип данных в список сопоставления.
Правка
Нажмите, чтобы изменить выбранный тип данных в списке сопоставление.
Удалить
Нажмите, чтобы удалить выбранное сопоставление типа данных из списка сопоставления.
Сброс до значений по умолчанию
Нажмите, чтобы сбросить список сопоставления типов к значениям по умолчанию SSMA.
Сопоставление типов локальных переменных по умолчанию
Следующая таблица содержит сопоставление типов по умолчанию для локальных переменных.
Типы данных Oracle и типы данных Microsoft SQL Server не всегда полностью совпадают. Там, где это возможно, выбор подходящего типа данных при публикации таблицы Oracle осуществляется автоматически. В случаях, когда выбор однозначного соответствия типов данных не очевиден, предлагаются альтернативные сопоставления типов данных. Сведения о выборе альтернативных соответствий типов данных см. ниже в разделе «Указание альтернативных сопоставлений типов данных».
Следующая таблица показывает, как по умолчанию осуществляется преобразование типов данных между Oracle и SQL Server , когда данные передаются издателем Oracle распространителю SQL Server . В столбце «Альтернатива» показано, допустимы ли альтернативные соответствия.
Сопоставления по умолчанию
SSMA имеет набор сопоставлений типов данных по умолчанию. список сопоставлений по умолчанию см. в разделе Project Параметры (сопоставление типов) (OracleToSQL).
Unsupported Data Types
The following data types are not supported; columns that have these types cannot be replicated:
Columns that use REF
Примеры (Transact-SQL)
Следующий пример производит сопоставление столбца данных Oracle типа NUMBER с типом данных SQL Servernumeric(38,38), изменяя стандартное сопоставление с типом float.
Следующий пример запроса возвращает два сопоставления для типа данных Oracle 9 CHAR: определенное по умолчанию и альтернативное.
Следующий пример запроса возвращает сопоставления по умолчанию для типа данных Oracle 9 NUMBER , когда он указан без масштаба и точности.
Oracle data types and Microsoft SQL Server data types do not always match exactly. Where possible, the matching data type is selected automatically when publishing an Oracle table. In cases that a single data type mapping is not clear, alternative data type mappings are provided. For information about how to select alternative mappings, see the "Specifying Alternative Data Type Mappings" section later in this topic.
The following table shows how data types are mapped by default between Oracle and SQL Server when data is moved from the Oracle Publisher to the SQL Server Distributor. The Alternatives column indicates whether alternative mappings are available.
Настройка сопоставлений типов данных
В следующей процедуре показано, как сопоставлять типы данных на уровне проекта, базы данных или объекта.
Для отображения типов данных
чтобы настроить сопоставление типов данных для всего проекта, откройте диалоговое окно Project Параметры :
В меню Сервис выберите Параметры проекта.
На левой панели выберите Сопоставление типов.
На правой панели отобразятся диаграмма сопоставления типов и кнопки.
Чтобы настроить сопоставление типов данных на уровне базы данных, таблицы, представления или хранимой процедуры, выберите базу данных, категорию объектов или объект в обозревателе метаданных Oracle.
В обозревателе метаданных Oracle выберите папку или объект для настройки.
На панели справа перейдите на вкладку Сопоставление типов .
Чтобы добавить новое сопоставление, выполните следующие действия.
В разделе тип источника выберите тип данных Oracle для отображения.
Если для типа требуется длина, укажите минимальную длину данных для сопоставления в поле " от " и максимальную длину данных в поле " Кому ".
Это позволяет настроить сопоставление данных для меньших и больших значений одного и того же типа данных.
В разделе тип целевого объекта выберите целевой SQL Server тип данных.
Для некоторых типов требуется длина целевого типа данных. Если это необходимо, введите новую длину данных в поле заменить на .
Чтобы изменить сопоставление типов данных, выполните следующие действия.
В разделе тип источника выберите тип данных Oracle для отображения.
Если для типа требуется длина, укажите минимальную длину данных для сопоставления в поле " от " и максимальную длину данных в поле " Кому ".
Это позволяет настроить сопоставление данных для меньших и больших значений одного и того же типа данных.
В разделе тип целевого объекта выберите целевой SQL Server тип данных.
Чтобы удалить пользовательское сопоставление типа данных, выполните следующие действия.
Выберите строку в списке Сопоставление типов, содержащую сопоставление типов данных, которое необходимо удалить.
Унаследованные сопоставления удалить нельзя. Однако унаследованные сопоставления переопределяются пользовательскими сопоставлениями для определенного объекта или категории объектов.
Сопоставление типа аргумента по умолчанию и типа возвращаемого значения
Следующая таблица содержит сопоставление типов данных по умолчанию для аргументов и возвращаемых значений.
Тип данных Oracle | Тип данных по умолчанию SQL Server |
---|---|
bСведения | varbinary(max) |
binary_double | float [53] |
binary_float | float [53] |
binary_integer | INT |
большой двоичный объект | varbinary(max) |
Логическое | bit |
char | varchar(max) |
char varying | varchar(max) |
character | varchar(max) |
character varying | varchar(max) |
CLOB | varchar(max) |
Дата | datetime2 [0] |
dec | Dec [38] [0] |
Decimal | float [53] |
double precision | float [53] |
FLOAT | float [53] |
INT | INT |
Целое число | INT |
long | varchar(max) |
Long RAW | varbinary(max) |
Long RAW [ * .. 8000] * | varbinary [*] |
Long RAW [8001.. * ] * | varbinary(max) |
Национальный знак | nvarchar(max) |
разные национальные знаки | nvarchar(max) |
Национальный символ | nvarchar(max) |
изменение национального алфавита ** | nvarchar(max) |
изменение национального алфавита * | nvarchar(max) |
nchar | nvarchar(max) |
NCLOB | nvarchar(max) |
number | float [53] |
NUMERIC | float [53] |
nvarchar2 | nvarchar(max) |
pls_integer | INT |
raw | varbinary(max) |
real | float [53] |
rowid | UNIQUEIDENTIFIER |
сигнтипе | smallint |
smallint | smallint |
строка | varchar(max) |
TIMESTAMP | datetime2 |
Метка времени с местным часовым поясом | datetimeoffset |
timestamp with time zone | datetimeoffset |
urowid | UNIQUEIDENTIFIER |
varchar | varchar(max) |
VARCHAR2 | varchar(max) |
xmltype | Xml |
* Применяется только к сопоставлению типов возвращаемых значений.
** Применяется только к сопоставлению типов аргументов.
Large Object Types
Oracle supports up to 4 gigabytes (GB), whereas SQL Server supports up to 2 GB. Data replicated above 2 GB is truncated.
If an Oracle table includes a BFILE column, the data for the column is stored in the file system. The replication administrative user account must be granted access to the directory in which the data is stored using the following syntax:
GRANT READ ON DIRECTORY TO
For more information about large objects types, see the section "Considerations for Large Objects" in Design Considerations and Limitations for Oracle Publishers.
FLOAT and NUMBER Types
The scale and precision specified during the mapping of FLOAT and NUMBER data types depends upon the scale and precision specified for the column using the data type in the Oracle database. Precision is the number of digits in a number. Scale is the number of digits to the right of the decimal point in a number. For example, the number 123.45 has a precision of 5 and a scale of 2.
Oracle allows numbers to be defined with a scale greater than the precision, such as NUMBER(4,5), but SQL Server requires the precision to be equal to or greater than the scale. To ensure there is no data truncation, if the scale is greater than the precision at the Oracle Publisher, the precision is set equal to the scale when the data type is mapped: NUMBER(4,5) would be mapped as NUMERIC(5,5).
If you do not specify a scale and precision for NUMBER, SQL Server defaults to using the maximum scale (8) and precision (38). We recommend that you set a specific scale and precision in Oracle for better storage and performance when the data is replicated.
Наследование сопоставления типов
Сопоставления типов можно настраивать на уровне проекта, на уровне категории объектов (например, во всех хранимых процедурах) или на уровне объектов. Параметры наследуются от более высокого уровня, если они не переопределены на более низком уровне. Например, при сопоставлении smallmoney с money на уровне проекта все объекты в проекте будут использовать это сопоставление, если не настроить сопоставление на уровне объекта или категории.
При просмотре вкладки Сопоставление типов в SSMA фон задается цветом, чтобы показать, какие сопоставления типов наследуются. Фон сопоставления типов желтый для любого унаследованного сопоставления типа и белый для любого сопоставления, указанного на текущем уровне.
Сопоставления типов по умолчанию
В SSMA для Oracle можно задать пользовательские сопоставления типов для аргументов, столбцов, локальных переменных и возвращаемых значений. Сопоставление по умолчанию для аргументов и возвращаемых типов практически идентично.
Типы больших объектов
Oracle поддерживает до 4 гигабайт (ГБ), в то время как SQL Server поддерживает до 2 ГБ. Реплицируемые данные свыше 2 ГБ усекаются.
Если таблица Oracle включает столбец типа BFILE, данные для этого столбца хранятся в файловой системе. Административной учетной записи репликации должно быть предоставлено право доступа в каталог, в котором хранятся данные. С этой целью должно использоваться следующее синтаксическое выражение:
GRANT READ ON DIRECTORY TO
Дополнительные сведения о типах больших объектов см. в разделе с рекомендациями по большим объектам статьи Рекомендации по структуре и ограничения для издателей Oracle.
Использование среды SQL Server Management Studio
Укажите сопоставления типов данных на вкладке Сопоставление данных диалогового окна Свойства статьи — . Она доступна на странице Статьи мастера создания публикаций и в диалоговом окне Свойства публикации — . Дополнительные сведения об использовании мастера и доступе к этому диалоговому окну см. в статьях Создание публикации из базы данных Oracle и Просмотр и изменение свойств публикации.
Указание сопоставления типов данных
На странице Статьи мастера создания публикаций или в диалоговом окне Свойства публикации — выберите таблицу и щелкните Свойства статьи.
Щелкните Указать свойства выделенной статьи таблицы.
На вкладке Сопоставление данных диалогового окна Свойства статьи — выберите сопоставления в столбце Тип данных подписчика:
Для некоторых типов данных существует только одно возможное сопоставление, при этом столбец в сетке свойств доступен только для чтения.
Для некоторых типов данных можно осуществить выбор из нескольких типов. Microsoft рекомендует использовать сопоставление по умолчанию, если приложению не требуется другого сопоставления. Дополнительные сведения см. в статье Data Type Mapping for Oracle Publishers.
Considerations for Data Type Mapping
Keep the following data type issues in mind when replicating data from an Oracle database.
Specifying Alternative Data Type Mappings
Typically, the default data type mapping is appropriate, but for many Oracle data types, you can select a data type mapping from a set of alternative mappings, rather than using the default. There are two ways to specify alternative mappings:
Override the default on a per-article basis using stored procedures or the New Publication Wizard.
Globally change the default for all future articles using stored procedures (defaults are not changed for existing articles).
The DATE Data Type
Dates in SQL Server range from 1753 A.D. to 9999 A.D., whereas dates in Oracle range from 4712 B.C. to 4712 A.D. If a column of type DATE contains values that are out of range for SQL Server, select the alternative data type for the column, which is VARCHAR(19).
Тип данных DATE
Даты в диапазоне SQL Server от 1753 нашей эры. до 9999 г. нашей эры, тогда как даты в Oracle распределяются в диапазоне от 4712 г. до нашей эры до 4712 г. нашей эры. Если столбец, имеющий тип DATE, содержит значения, выходящие за диапазон SQL Server, выберите для столбца альтернативный тип данных, которым является VARCHAR(19).
Next Steps
следующим шагом процесса миграции является создание отчета оценки или преобразование объектов базы данных Oracle в SQL Server синтаксис. При создании отчета об оценке объекты Oracle автоматически преобразуются во время оценки.
страница сопоставление типов диалогового окна Project Параметры содержит параметры, которые настраивают, как SSMA преобразует типы данных Oracle в SQL Server типы данных.
страница сопоставление типов доступна в диалоговых окнах Project Параметры и Project по умолчанию Параметры .
чтобы указать параметры для всех будущих проектов SSMA, в меню сервис щелкните по умолчанию Project Параметры, выберите тип проекта миграции, для которого необходимо просмотреть или изменить параметры в раскрывающемся списке версия целевого объекта миграции , а затем щелкните сопоставление типов в нижней части левой панели.
чтобы указать параметры для текущего проекта, в меню сервис выберите Project Параметры и щелкните сопоставление типов в нижней части левой панели.
Чтобы задать параметры для текущего объекта или класса объектов, используйте вкладку Сопоставление типов в главном окне SSMA.
Использование Transact-SQL
Пользовательские сопоставления типов данных могут быть заданы программно с помощью хранимых процедур репликации. Можно также задать сопоставления по умолчанию, используемые при сопоставлении типов данных между Microsoft SQL Server и системой управления базами данных (СУБД), отличной от SQL Server. Дополнительные сведения см. в статье Data Type Mapping for Oracle Publishers.
Определение пользовательского сопоставления данных при создании статьи, принадлежащей публикации Oracle
Если публикация Oracle не существует, ее необходимо создать.
На распространителе выполните хранимую процедуру sp_addarticle. Укажите значение 0 в параметре @use_default_datatypes. Дополнительные сведения см. в статье определить статью.
Чтобы просмотреть существующие сопоставления для столбца в опубликованной статье, выполните хранимую процедуру sp_helparticlecolumns .
На распространителе выполните хранимую процедуру sp_changearticlecolumndatatype. Чтобы определить опубликованный столбец, укажите имя издателя Oracle в параметре @publisher и задайте значения параметров @publication, @article и @column. Укажите имя типа данных SQL Server, сопоставляемого с типом @type, и при необходимости задайте значения параметров @length, @precision и @scale.
На распространителе выполните хранимую процедуру sp_articleview. Она создаст представление, используемое для создания моментального снимка из публикации Oracle.
Назначение для типа данных сопоставления по умолчанию
(Необязательно) На распространителе в любой базе данных выполните хранимую процедуру sp_getdefaultdatatypemapping. Укажите значения параметров @source_dbms, @source_type, @destination_dbms, @destination_version и других параметров, необходимых для идентификации исходной СУБД. Сведения о текущем сопоставлении типа данных в целевой базе данных возвращаются в выходных параметрах.
На распространителе в любой базе данных выполните хранимую процедуру sp_helpdatatypemap(необязательно). Укажите значение параметра @source_dbms и других параметров, необходимых для фильтрации результирующего набора. В результирующем наборе просмотрите значение параметра mapping_id для текущего сопоставления.
На распространителе в любой базе данных выполните хранимую процедуру sp_setdefaultdatatypemapping(необязательно).
Если известно необходимое значение параметра mapping_id, полученное на шаге 2, укажите его в параметре @mapping_id.
Если значение mapping_id неизвестно, необходимо указать значения параметров @source_dbms, @source_type, @destination_dbms, @destination_type и других параметров, необходимых для идентификации существующего сопоставления.
Определение допустимых типов данных, соответствующих типу данных Oracle
- На распространителе в любой базе данных выполните хранимую процедуру sp_helpdatatypemap. Укажите значение ORACLE в параметре @source_dbms и задайте значения других параметров, необходимых для фильтрации результирующего набора.
Сопоставление типов столбцов по умолчанию
Следующая таблица содержит сопоставление типов по умолчанию для столбцов.
Тип данных Oracle | Тип данных по умолчанию SQL Server |
---|---|
bСведения | varbinary(max) |
binary_double | float [53] |
binary_float | float [53] |
большой двоичный объект | varbinary(max) |
char | char |
различные знаки [*.. * ] | varchar [*] |
Char [*.. * ] | Char [*] |
character | char |
Разное символов [*.. * ] | varchar [*] |
символ [*.. * ] | Char [*] |
CLOB | varchar(max) |
Дата | datetime2 [0] |
dec | Dec [38] [0] |
Dec [*.. * ] | Dec [*] [0] |
Dec [*.. * ] [*..*] | Dec [*] [ * ] |
Decimal | Decimal [38] [0] |
Decimal [*.. * ] | Decimal [*] [0] |
Decimal [*.. * ] [*..*] | Decimal [*] [ * ] |
double precision | float [53] |
FLOAT | float [53] |
float [*.. 53] | float [*] |
float [54.. *] | float [53] |
INT | INT |
Целое число | INT |
long | varchar(max) |
Long RAW | varbinary(max) |
Long RAW [*.. 8000] | varbinary [*] |
Long RAW [8001.. *] | varbinary(max) |
long varchar | varchar(max) |
Long [*.. 8000] | varchar [*] |
Long [8001.. *] | varchar(max) |
Национальный знак | nchar |
Национальная кодировка [*.. * ] | nvarchar [*] |
Национальный знак [*.. * ] | nchar [*] |
Национальный символ | nchar |
Национальная буква [*.. * ] | nvarchar [*] |
Национальный символ [*.. * ] | nchar [*] |
nchar | nchar |
nchar [*] | nchar [*] |
NCLOB | nvarchar(max) |
number | float [53] |
Number [*.. * ] | numeric [*] |
Number [*.. * ] [*..*] | numeric [*] [ * ] |
NUMERIC | NUMERIC |
numeric [*.. * ] | numeric [*] |
numeric [*.. * ] [*..*] | numeric [*] [ * ] |
NVARCHAR2 [*.. * ] | nvarchar [*] |
RAW [*.. * ] | varbinary [*] |
real | float [53] |
rowid | UNIQUEIDENTIFIER |
smallint | smallint |
TIMESTAMP | datetime2 |
Метка времени с местным часовым поясом | datetimeoffset |
Метка времени с местным часовым поясом [*.. * ] | DateTimeOffset [*] |
timestamp with time zone | datetimeoffset |
Метка времени с часовым поясом [*.. * ] | DateTimeOffset [*] |
timestamp [*.. * ] | datetime2 [*] |
Urowid | UNIQUEIDENTIFIER |
urowid [*.. * ] | UNIQUEIDENTIFIER |
varchar [*.. * ] | varchar [*] |
VARCHAR2 [*.. * ] | varchar [*] |
XmlType | Xml |
Читайте также: