Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Надеюсь, что укажут пути поиска.
На MS SQL-Сервер 2000 SP3 пролинкован Oracle9i, и с помощью DTS пытаюсь добавить строки в oracle-таблицу. Таблица имеет очень большое количество полей, типов CHARACTER, NUMERIC и DATE. В запросе-источнике явно указаны не все поля (т.е. часть должна заполниться NULLами). В использованных полях вроде ни одно из указанных значений не превышает длины поля. Правда, на закладке Destination окна Transorm Data Task в DTS длины полей, вроде, в 2 раза больше, чем реально в Oracle (точно проверить не могу, т.к. сейчас нет доступа к схеме oracle-таблицы).
В итоге DTS выдает ошибку:
ORA-01401: inserted value too large for column
Не могу понять где искать решение. Тем более, что доступ к oracle-серверу ограничен.
11 апр 05, 20:08    [1458750]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
Думаю, что длину CHARACTER Вы уже сравнили. Проверьте NUMERIC. NUMERIC от оракла не точно соответствует NUMERIC в SQL Server. Особенно integer.
11 апр 05, 22:45    [1458897]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Упростил запрос-источник данных до:
select
key1='proba',
key2='20000',
key3='200000',
key4=1,
p1='Пробная'
.
Схема из Oracle Enterprise Manager:
Name	Datatype	Size	Scale	Nulls?	Default Value
KEY1	NCHAR	         10		No	
KEY2	NCHAR	         15		No	
KEY3	NCHAR	         22		No	
KEY4	NUMBER	         		No	
P1	NCHAR	         30		Yes
Остальные поля также имеют типы NCHAR и NUMBER и разрешают NULLы.
По прежнему выдает указанную в начале темы ошибку. При этом UPDATE по полу P1 проходит нормально. Может ошибка связана с NULLами, которые пытаются подставиться в остальные поля при INSERT ?
12 апр 05, 10:42    [1459824]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Неужели ни у кого нет идей на данную тему?
Execute SQL Task такого вот вида:
UPDATE OraTab
SET
key1='proba',
key2='20000',
key3='200000',
key4=1,
p1='Пробная'
Where  p1='16 mm Cro-Moly'
,
т.е. полностью аналогичный запросу-источнику при попытке вставки строк, выполняется без проблем. Неужели действительно проблема связана с NULLами по умолчанию ? Получается придется явно задавать все поля таблицы.
12 апр 05, 12:16    [1460331]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
Неужели ни у кого нет идей на данную тему?
Ну так если ошибка самого Oracle - ORA-01401: inserted value too large for column то смотрите что именно рекомендует Oracle. А также что за значения попадают на сам Oracle
12 апр 05, 12:25    [1460382]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Pavel Zenkevich
Member

Откуда: Минск
Сообщений: 121
Ответил в форуме Oracle

-------------------------------------------------------
Кто людям помогает - тот тратит время зря. (с) Шапокляк
12 апр 05, 13:12    [1460682]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Хреново получается. Execute SQL Task (с oracle-подключением) спокойно выполняет не только UPDATE, но и аналогичный INSERT (как указано в листингах), т.е. при этом забивая неуказанные колонки NULLами. А вот Transform Data Task ни в какую не хочет выполнить подобную задачу.
Проблема в том, что в Execute SQL Task я не могу доставить данные из таблицы на MS SQL Сервере. При попытке выполнения такого, например, запроса:
INSERT INTO oracle..test.OraTab 
Select *
From ##PROM
ругается таким вот образом:
OLE DB provider 'MSDAORA' supplied inconsistent metadata for a column. Metadata information was changed at execution time.
Понять не могу, что делать
12 апр 05, 15:55    [1461607]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Pavel Zenkevich
Member

Откуда: Минск
Сообщений: 121
Оно?

-------------------------------------------------------
Кто людям помогает - тот тратит время зря. (с) Шапокляк
12 апр 05, 19:10    [1462470]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
AIice
Member

Откуда:
Сообщений: 88
По-моему это проблема, которую я уже встречала: сложность с перекодировкой UTF-16 в UTF-8. Если вам не принципиально, то самое простое решение - это удвоить длину символьных полей в Оракле. Заполнять оно все равно будет только наполовину, но ошибки уйдут. Чем в Оракл грузите, LOADER-ом?
12 апр 05, 19:50    [1462570]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Pavel Zenkevich
Оно?

Мне кажется, нет. Там речь идет о представлениях, а я пытаюсь работать с таблицей созданной Create Table.
Что касается inconsistent metadata, то по информации, которую я смог найти на западных сайтах, это часто связано с полями типа NUMBER без указанной явно длины (Size). Таких полей в таблице много.
К сожалению, из-за отсутствия административного доступа к оракловской СУБД не могу полноценно поэкспериментировать. Поэтому пока проблему так и не решил.
12 апр 05, 20:42    [1462642]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
Ну ведь не MSDAORA единым. Что если Provider=OraOLEDB.Oracle.1; ?
12 апр 05, 21:33    [1462701]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Оракловский администратор вроде готов принять данные из базы Access. Сейчас сосредоточусь на подготовке данных, а потом вернусь к проблеме.
13 апр 05, 09:01    [1463095]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
dburtsev1
Ну ведь не MSDAORA единым. Что если Provider=OraOLEDB.Oracle.1; ?

Делаю LinkedServer через Oracle Provider For OLE DB.
Запрос в QA:
select * from oracle1..test.OraTab
Результат:
OLE DB provider 'OraOLEDB.Oracle' supplied inconsistent
metadata for a column. Metadata information was changed at execution time.

Alice
Если вам не принципиально, то самое простое решение - это удвоить длину символьных полей в Оракле. Заполнять оно все равно будет только наполовину, но ошибки уйдут

Приведу такой пример. Чтобы избежать ошибок, которые выдает простой запрос к пролинкованному ораклу, рекомендуют использовать OPENQUERY. Я попробовал использовать эту рекомендацию:
Select * from OPENQUERY(Oracle,'Select * From test.OraTab')
Результат:
OLE DB provider 'MSDAORA' returned an unexpected data length
for the fixed-length column '[MSDAORA].p4'. The expected data length is 2,
while the returned data length is 1.
Насколько понимаю, здесь расхождение между информацией о метаданных, которыми MS SQL оперирует до запроса, и реальными типами данных, полученных в запросе. И это расхождение вне зависимости от того, больше предположение, чем факт, или меньше, расценивается как ошибка. Поля, которые выдают такую ошибку имеют тип NCHAR. Если вместо "*" выбрать одно поле, скажем с типом NUMBER, то запрос с OPENQUERY отрабатывает нормально. Здесь пишут:
Oracle 8.x-specific data types, such as CLOB, BLOB, BFILE, NCHAR, NCLOB, and NVARCHAR2, are not supported.
. Записывал ли кто-нибудь из MS SQL в таблицу Oracle, имеющую поля NCHAR ???.
Пытался использовать ODBC-драйвер SQORA32.dll от ORACLE для подключения в Transform Data Task. Все равно выдает inserted value too large for column. При этом тот же драйвер нормально записывает строки в эту же таблицу при работе через Access
13 апр 05, 19:32    [1466226]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
Не пойму, в чём тут проблема.

create table ORATAB (
KEY1 NCHAR (10) NOT NULL,
KEY2 NCHAR (15) NOT NULL,
KEY3 NCHAR (22) NOT NULL,
KEY4 NUMBER NOT NULL,
P1 NCHAR (30) NULL);

select * from ORACLE..TEST.ORATAB;

Server: Msg 7356, Level 16, State 1, Line 1
OLE DB provider 'MSDAORA' supplied inconsistent metadata for a column. Metadata information was changed at execution time.
OLE DB error trace [Non-interface error: Column 'KEY1' (compile-time ordinal 1) of object '"COURTINFO"."ORATAB"' was reported to have a DBTYPE of 130 at compile time and 129 at run time].

Если будет время, продолжу копать.
13 апр 05, 23:39    [1466535]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
Пошастал по и-нету. Китайские товарищи утверждают, что это oracle bug: 3117040 revises in 9.2.0.4.10.

У меня Oracle9i Release 9.2.0.4.0
13 апр 05, 23:56    [1466552]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
To dburtsev1: признателен Вам за то участие, которое Вы принимаете в поисках решения моей проблемы.

select * from ORACLE..TEST.ORATAB
А если попытаться перегнать данные из MS SQL-таблицы в ORATAB (через DTS или QA)?
create table MSTab (
KEY1 VARCHAR (10) NOT NULL, 
KEY2 VARCHAR (15) NOT NULL,
KEY3 VARCHAR (22) NOT NULL, 
KEY4 INT NOT NULL, 
P1 VARCHAR (30) NULL)
go
INSERT INTO MSTab VALUES ('redcossack','20000','200000',1,'Пробная 1')
INSERT INTO MSTab VALUES ('redcossack','20001','200001',1,'Пробная 2')
14 апр 05, 10:25    [1467097]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Andrey_X
Member

Откуда: Kharkov
Сообщений: 5
У меня проблема решилась так

Oracle
create table ORATAB (
KEY1 VARCHAR2 (10) NOT NULL, 
KEY2 VARCHAR2 (15) NOT NULL, 
KEY3 VARCHAR2 (22) NOT NULL, 
KEY4 NUMBER (10,0) NOT NULL, 
P1 VARCHAR2 (30) NULL )

Явное указание размера KEY4 NUMBER (10,0)

MSSQL

CREATE TABLE MSTab (
	KEY1 VARCHAR (10) NOT NULL, 
	KEY2 VARCHAR (15) NOT NULL,
	KEY3 VARCHAR (22) NOT NULL, 
	KEY4 INT NOT NULL, 
P1 VARCHAR (30) NULL)
go
INSERT INTO MSTab VALUES ('redcossack','20000','200000',1,'Пробная 1')
INSERT INTO MSTab VALUES ('redcossack','20001','200001',1,'Пробная 2')
go

insert into openquery(oraserver, 'select * from Test_MS')
select KEY1, KEY2, KEY3, KEY4, P1 from MSTab

--или

insert into openquery(oraserver, 'select * from Test_MS')
select * from MSTab
14 апр 05, 11:04    [1467303]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
To Andrey_X: правильно ли я понял, что проблема решилась после изменения типов полей в oracle с NCHAR на VARCHAR2 и NUMBER на NUMBER(10,0)? К сожалению я имею дело с ERP, на которую пока дышать бояться, так что изменение типов полей маловероятно в моем случае.

To dburtsev1: А не могли бы Вы дать ссылку на китайских товарищей (если они пишут не на китайском).
14 апр 05, 12:00    [1467636]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
К сожалению я имею дело с ERP, на которую пока дышать бояться, так что изменение типов полей маловероятно в моем случае.
Другая таблица/представление с триггером ???
14 апр 05, 12:02    [1467649]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
dburtsev1
Пошастал по и-нету. Китайские товарищи утверждают, что это oracle bug: 3117040 revises in 9.2.0.4.10.
Релизы: для СУБД - 9.2.0.5.0, для клиентов - 9.2.0.1.0.
14 апр 05, 12:37    [1467846]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
Andrey_X
Member

Откуда: Kharkov
Сообщений: 5
Именно, такие типы/размеры полей предлагает DTS при создании таблицы-приемника.
Критично в результирующей таблице наличие VARCHAR2 или NVARCHAR2 полей,
NUMBER работает и без размера.
14 апр 05, 12:47    [1467923]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
Создал в oracle аналогичную таблицу, единственное отличие от первоначальной - заменил тип для всех NCHAR на VARCHAR2. В таком варианте и заполнение таблицы в DTS и выборка через OPENQUERY работают нормально.
14 апр 05, 15:21    [1468895]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
Я засунул в гугл «was reported to have a DBTYPE of 130 at compile time and 129 at run time». В полученном мной результате первая ссылка blog.itpub.net/post/10/23317
Вверху я кликнул на [ Translate this page ]
14 апр 05, 18:04    [1469675]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
dburtsev1
Member

Откуда: NY USA
Сообщений: 351
http://forums.oracle.com/forums/thread.jsp?forum=148&thread=226114&message=632149
14 апр 05, 18:07    [1469687]     Ответить | Цитировать Сообщить модератору
 Re: проблема при заполнении таблицы Oracle9i из MS SQL-Сервера  [new]
redcossack
Member

Откуда: Москва
Сообщений: 147
В итоге пошел по пути использования таблицы-посредника.
В начале DTS-пакета создаю oracle-таблицу, в которой NCHAR заменен на VARCHAR2. Данные из MS SQL-таблицы благополучно перегоняю в этого посредника. Затем через Execute SQL Task перегоняю данные из посредника в основную oracle-таблицу. На финише удаляю посредника. Можно было бы, конечно, для переноса из посредника в основную таблицу использовать триггер, но пока нет времени разбираться с особенностями оракловских триггеров.
15 апр 05, 10:57    [1470759]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить