|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Доброго времени! Собсно создал пустую базу, увеличил макс. длину полей varchar2 (rdbms/admin/utl32k.sql) т.к. в боевой есть varchar2 поля со значениями близкими по длине к 4000: Код: plsql 1. 2. 3. 4. 5.
Подскажите пж как правильно снять структуру таблиц (без данных) с боевой базы, заменить все значения длины varchar2 на длину*2, накатить эту измененную структуру на пустую базу, потом накатить дамп сделанный экспортом? При импорте мне же не надо указывать в какой кодировке значения в файле дампа - оно внутри файла же указано, просто делаю стандартный imp full=y? И при импорте в случае отсутствия объекты создаются же но существующие не пересоздаются, т.е. существующие таблицы не пересоздадутся, но заполняться? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 00:37 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
или "на ровном месте", или... ) и, как-то, вопрос - по своему представлению решения.. ( *дампы exp'а, если не изменяет, правились в sed/far etc тест на паре табличек какие-то вопросы снимет ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 04:17 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
ma1tus , т.е. предлагаете копать дамп? Дискомфорт какой-нить будет при его редактировании? - он ~2.5 Гб весит.. Хотя можно же exp не full делать, а только tables? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 05:43 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Т.е. Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 05:59 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
А зачем редактировать dump просто пробежаться по dba_tab_columns и сделать alter table mytab modify column_name varchar2(data_length) + можно пробежать по dba_source p.s. Так делал когда varchar2 byte переделывал на char ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 09:45 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Пока не поздно и ваши рассуждения не разошлись слишком далеко / топик в самом начале - вам нужно определиться. Один говорит про старый экспорт (утилиты exp/imp): ma1tus *дампы exp'а, если не изменяет, правились в sed/far etc А второй - говорит про Data Pump (утилиты expdp/impdp): ded-mazay Т.е. Код: plaintext
Разница, мягко говоря, существенная, особенно в контексте того что вы тут собрались руками править внутренности дампов. Кстати, дампы Data Pump'а - там внутри вообще XML'ы. Автору - Вы бы соблюли стандартные правила оформления вопросов, и указали бы все что нужно, включая версию базы, ОС и тот метод экспорта, который планируете использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 10:19 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
11.2.0.3 вроде не умеет max_string_size EXTENDED, во всяком случае utl32k.sql в коробке с ней нет. Т.е. я не могу на продакте изменить длину полей, т.к. есть значения длиной почти 4k символов и нет возможности установить длину более 4k. Всего полей varchar2 в базе кстати 2010 ;) Зато вычитал что в 11.2 impdp умеет записывать DDL в файл не выполняя при этом ничего в БД Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Это все конечно хорошо, НО вопрос получается остается открытым - мне нужно выгрузить только структуру, чтобы не работать с файлом соержащим данных на 2.5 Гб.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 10:20 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
shane54 , я чюток не успел с предидущим постом.. ) Жаль топики редактировать нельзя - сразу хотел поправить.. Oracle 11.2.0.3 в кодировке CLMSWIN1251 -> 19c UTF8 Для того, чтобы конвертировать при импорте данные в UTF8 нужно сначала любыми средствами выгрузить из 11.2 мета создания собсно этой базы и заменить длину всех полей varchar2 на длина*2 exp/imp или expdp/impdp это будет без разницы. в impdp по крайней мере есть создание sql файла содержащего DDL но мне нужен этот sql только с метаданными, без дата ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 10:35 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Ну я честно говоря не вижу, где проблема. Все делается как Вы и говорите - через impdp создаёте SQLFILE, загружаете его в базу, потом как подсказал Vadim Lejnin, на основе %_TAB_COLUMNS генерируете скрипты с ALTER TABLE MODIFY COLUMN, прогоняете их, потом выполняете impdp в режиме APPEND - все должно получиться, что именно Вас смущает? Потренируйтесь на маленьком объеме сначала, таблиц 5-10 - отладьте скрипты - и вперёд. P.S. Да, с редактирование постов задним числом - это всегда "палка о двух концах", каждый движок форума предлагает этот вопрос решать по-своему. Потому что если так подумать, почему так сделано - если дать пользователям возможность редактировать сколь угодно старые посты - получится каша, можно полностью изменить свое старое сообщение - и тогда все последующие ответы потенциально могут стать "ни о чем". Так что как сделано тут на sql.ru - так сделано, нам остаётся только следовать местным правилам и просто "спамить" дополнительными постами, если что-то нужно поправить относительно уже опубликованных ответов. Ну и плюс, сколько-то минут после опубликования своего ответа, его можно таки редактировать. Много раз видел сообщение внизу поста "отредактировано <тогда-то>". Вот сейчас впервые тоже попробовал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 10:59 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
ОК, буду пробовать, думается будет много проблем с тем, что некоторые записи создадутся когда я sql файл загоню в базу, и продублируются когда имп сделаю.. На счет редактора - обычно править можно только если это последний пост для данного топика и автор этого поста = текущий посетитель ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 11:53 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
ded-mazay ... думается будет много проблем с тем, что некоторые записи создадутся когда я sql файл загоню в базу, и продублируются когда имп сделаю.. Это почему? Есть Metadata Import, есть Data-Only Import. Почему дубликаты, откуда? И вообще, Вы же знаете, в "нашем мире" нет термина "думаю", "наверно", "скорее всего" - мы просто берём и тестируем, любую теорию, любое сомнение. Касательно Вашей задачи - намного важнее не забыть после загрузки SQLFILE (т.е. фактически после выполнения импорта Metadata-Only) и после ALTER всех полей на предмет расширения, не забыть отключить все триггера и ограничения (Constraints), внешние ключи (Foreign Keys), Check Constraints - вот это все. Тоже, конечно, нагенерите скриптов, а потом не забудьте включить все обратно (тоже скриптами конечно). И при включении, если записей не миллиарды - я обычно ещё ENABLE VALIDATE делаю, чтоб два раза себя перепроверить, что точно все логически правильно перенеслось. Вот если это забыть, отключение триггеров - вот тогда точно такие дубликаты можно получить, что до скончания веков не вычистить. Хотя, конечно, зависит от Вашей архитектуры, от того какие именно триггеры есть (если вообще есть). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 12:37 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Vadim Lejnin alter table mytab modify column_name varchar2(data_length CHAR ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 13:35 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
мм.. если делать сначала impdp ........ SQLFILE=dpump_dir2: EXPFULL.sql CONTENT= METADATA_ONLY то я правильно понимаю что не надо ничего отключать - из полученного файла накатится только структура, потом после обработки таблиц накатить дамп и данные сядут со всеми потрохами на свое место? Хотя на самом деле че там писать - пробовать надо, благо есть тестовый (пока тестовый) сервак максимально приближенный по параметрам к продакту, правда на нем развернул виртуальную среду proxmox, подготовил несколько виртуалок, даже базу не надо пересоздавать в случае чего просто грохается испорченный виртуальный хост и за несколько минут разворачивается из бекапа новый.. ) вощм пошел пробывать.. отпишу.. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 14:32 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Наконец-то выспался.. Итак, выгрузил метаданные, только начал копаться в sql файле, сходу интересное наблюдение - обновляет профиль устанавливая PASSWORD_LIFE_TIME UNLIMITED и тут же создает залоченных пользователей с экспайред паролем.. Собсно пользователей я кроме одного импортировать вообще пока не буду и кстате владельца схемы выгрузил с паролем и без лока, хотя в доках вроде написано пароли не выгружает вообще в sql.. ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: plsql 1. 2. 3.
Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 20:00 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
andrey_anonymous Vadim Lejnin alter table mytab modify column_name varchar2(data_length CHAR ) теперь понял, спасибо! собсно файлик с метаданными всего 32мб вышел, рассчитываю обойтись без пробежки с alter table - сразу как надо в sql поправлю/уберу и дамп сверху.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 20:34 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Итак, почти все норм, но есть шороховатости: После импорта данных в талицу сыпет ошибками про статистику похоже: ORA-20005: object statistics are locked (stattype = ALL) Есть смысл в sql добавить в конце Код: plsql 1.
или оставить как есть, после импорта разблокировать и собрать статистику? И да - триггеры все же забыл вырезать, 1-й блин комом ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 05:40 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Я предпочитаю статистику не импортировать вообще, и потом всегда пересобираю, когда все загрузки закончены. Если база не терабайты. Или, если статистика какая-то "хитрая", и её на старой базе руками подстраивали, всегда можно её выгрузить, и потом загрузить в новую базу. У пакета DBMS_STATS есть соответствующие процедуры. Одно из приемуществ Data Pump - возможность достаточно гибких "политик" INCLUDE/EXCLUDE - поэтому можно в итоге добиться практически отсутствия ошибок. Так что в Вашем случае Вы можете как исключить импорт (создание) ненужных пользователей, так и не импортировать статистику. Со статистикой вообще такое дело - её более чем полезно пересобрать после окончания импорта. Вы там выше упоминали что размер дампа какие-то гигабайты, 2.5 ГБ что ли - так она пересоберется за несколько минут. Добавьте в файл параметров импорта: Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 11:15 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
ded-mazay ... то я правильно понимаю что не надо ничего отключать - из полученного файла накатится только структура, потом после обработки таблиц накатить дамп и данные сядут со всеми потрохами на свое место? Логика такая - если Data Pump сам выполняет обе фазы - и Metadata Import и Data-Only Import - то он "все делает хорошо", и все перенесётся как надо. Если же Вы разделяете Metadata Import отдельно, Data Import отдельно, и между ними ещё и какие-то манипуляции выполняете со структурой таблиц - то подразумевается, что Вы "понимаете что Вы делаете". И при фазе Data Import, на каждую вставляемую строку сработают и триггера, и будут проверяться все ограничения на колонки (Constraints). Именно поэтому их надо отключать и вообще, следить за тем, что происходит при импорте. Если Вы присмотритесь к логу импорта - что старого imp, что нового impdp - там есть отдельный шаг, когда он включает триггера и накатывает ограничения. Причём до какой-то степени он обладает интеллектом, и если схема данных замороченная, и есть "cross-зависимости", когда схемы ссылаются друг на друга, и образуются циклы и петли - Data Pump умеет это дело разрешать, и соблюдая некий внутренний порядок включения ограничений, в итоге все импортируется без ошибок и конфликтов. Честно говоря не вникал, как именно он это делает - может никакой магии и нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2021, 11:23 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Код: plsql 1.
Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: plsql 1.
Код: html 1. 2.
Но в консоли Код: plsql 1.
Код: html 1. 2. 3.
Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Длина в байтах кажет что это ютф, а почему знаки вопроса в консоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2021, 00:01 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
NLS_LANG Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2021, 00:29 |
|
CLMSWIN1251 -> UTF8 и поля varchar2
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Спасибо! Ну собсно уже почти все! При импорте дампа было немного ругани на то, что каких-то обьектов APEX не хватает, но думается оно из-за версий 11 -> 19, еще некоторые функции и триггеры не переехали, думается из-за присутствия в них символов %, вощм еще несколько импортов с допиливанием точно будет, но основная задача с конвертом в ютф достигнута ) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2021, 00:58 |
|
|
start [/forum/topic.php?fid=52&fpage=10&tid=1879816]: |
0ms |
get settings: |
22ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
384ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 492ms |
0 / 0 |