Re: Oracle. Администрирование. | |
---|---|
PaulWist Сообщений: 14621 Дата регистрации: 01.04.2004 |
А просто ХП или view вызвать на линкованном сервере? почему обязательно нужно вернуть курсор, а не простой RecordSet (в Оракле полный ноль, поэтому исхожу из общих представлений)
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Курсор это и есть RecordSet... Выше и показываю, что сделал на линковочном сервере процедуру с входным параметром... Протестировал на нем. Работает. Но с другого сервера, у которого сделан dblink (к тому серверу) не могу получить результат. Каким способом получить его, я и спрашиваю. |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Да, если в запросе соединяются локальная и удалённая таблица, и, к примеру, тебе очевидно что из удалённой нужно всего 2 подходящие записи, то извлечена по дблинку будет всё равно таблица целиком. Объекты тоже не работают через dblink. Сделать представление на стороне удалённой БД. Представление может быть и из таблиц, и из табличных ХП. Для параметризации (т.к. зачастую требуется параметризовать такого рода представления) рекомендуется использовать переменные контекста. Теоретически там и GTT можно подключить, но как-то оно стремновато. По крайней мере напрямую использовать. Хотя люди вроде справлялись... asktom.oracle.com Том для примера использует штатную client_info, но я думаю что лучше будет завести в этой схеме свой контекст (соответственно и пакет управляющий переменными) и использовать осмысленные переменные ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Именно View на линковочном сервере и пока выход... Спасибо большое... Запрос при обращении к View на линковочном сервере (ну соотвественно проанализировав план и построив недостающие индексы) работает за секунду... Круто... ВСЕМ СПАСИБО... Видимо чего-то зациклило в голове... Правда дома проблемы (видимо из-за этого)... |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
А все началось с того, что прикрепили к другому проекту, а там свое начальство...
Начало указывать, как делать, типа работаем через процедуры... Я не заморачиваясь начал именно с них... Не пошло... Тут по старому проекту заказчик звонит. Переключился. Решил проблему. Опять вернулся к прикрепленному проекту... С начальством надо просто соглашаться (как с женщиной, не в обиду тут присутствующим), а делать по своему. |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Это чревато... Я про начальство Лучше разводить бюрократию - т.е. делать всё же "как говорят", но регулярно писать докладные (сначала непосредственному начальству, не поможет - копию "через голову", и так не поможет - вплоть до "генерала" - если и это не помогает - значит "надо валить"), где излагать проблемы вызванные дуроломством этих самых начальников-советчиков, и, желательно, предлагать адекватные решения. Т.к. иначе ты в любом случае будешь крайним - а оно тебе надо? ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Что-то я плохо понимаю про параметризированную View... в оракле... Сделал пример на dblink-овском сервере вьюху:
Но мне ребятам надо обернуть в процедуру. для теста сделал:
Вызываю:
Что то надо параметризированную вьюху делать... Но не умею... Может поможешь на примере...? Исправлено 1 раз(а). Последнее : ВладимирС, 28.09.17 15:19 |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Так по ссылке ж пример есть параметризованного представления. Только там берётся sys_context('userenv', 'client_info'), а я предлагаю свою переменную контекста, т.е. SYS_CONTEXT('MY_CTX', 'MY_PARAM'). Как создаётся и управляется контекст посмотри уж сам в мануале, там ничего экстра-сложного нет
Просто задаются значения переменным/атрибутам при помощи вызова DBMS_SESSION.SET_CONTEXT() изнутри процедуры пакета связанного с контекстом. ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
PaulWist Сообщений: 14621 Дата регистрации: 01.04.2004 |
1. Смотри где различие в планах выполнения. 2. Опять же в синтаксисе не силён, а разве нельзя сразу написать:
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Спасибо... да можно и так... Блин... пошли проблемы с UNDO TBSPASE на тестовом сервере... в прикрепленном проекте... [attachment 28374 UNDO.png] Я админов не знаю... Может добавить просто еще один файл ? если к понедельнику не разрулится... |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
undo пространство (впрочем как и любое другое) "само по себе" не уменьшится - если уж доросло до 30Гб то таким и останется.
Далеко не всё то место которое показывается как "занятое" на самом деле занято в undo пространстве. Это пространство для автоматически управляемых сегментов отката. На "занятость" влияет параметр undo_retention - время сколько времени хранить инфу отката. Возможно что он сильно завышен - тогда система будет пытаться излишне долго хранить "старые данные". Если не используются ретроспективные запросы (flashback), то это самое время должно соответствовать времени самой длительной транзакции - иначе эта транзакция может упасть по ошибке snapshot too old. Собственно информацию отката активно генерируют команды модификации данных (insert/update/delete). Т.е. если в систему производится массированная заливка информации, то вполне естественно что сегменты отката будут забиты. Вообще в таких ситуациях не "просто добавляют файл", а выясняю причину такого поведения (прежде всего ищут запросы/транзакции/сессии активно потребляющие undo - т.е. создающие большой объём информации отката). Вполне возможно, что для тестового сервера это совершенно нормально, и на продуктиве таких проблем не возникнет. ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
У меня еще вопрос...
В таблицах используются CLOB поля. Естественно они занимаю много места (хотя и используем COMPRESS HIGH). Данные в основном нужны за предыдущий и текущий месяцы. Вопрос: Если их очищать за предыдущие периоды, то оракл будет использовать освобожденное место ? А то сжирается TABLESPACE. |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Будет. Но всё зависит от опций хранения LOB и параметров табличного пространства...
Во-первых сервер хранит "старые" LOB данные - либо "некоторое количество версий", либо "некоторое время". Это нужно и для flashback запросов и для обычных запросов - для обеспечения согласованного состояния данных. Управляется опциями PCTVERSION или RETENTION (первое только для BASICFILE, а у тебя явно SECUREFILE используется, раз пишешь про сжатие). Можно задать и максимальный размер для LOB сегмента - тогда сервер начнёт переписывать "старые версии" раньше - при достижении этого лимита. Хотя для динамических систем (когда сложно заранее оценить какой объём данных реально необходим) такой расчёт непросто сделать. Может оказаться проще периодически делать SHRINK SPACE для этого LOB сегмента (тогда "удалённые записи" уж точно станут удалёнными, а не "доступной для запросов прошлой версией"). Во-вторых LOB данные могут хранится in row - т.е. прямо в сегменте где и "обычные" поля хранятся (если размер LOB данных в поле чуть меньше 4К) - это по управлению используемым дисковым пространством сильно похоже на обычное varchar2(4000) поле. Т.е. без реорганизации таблицы такое "пустое место" тоже может не освобождаться (особенно если удаляются не сами "старые записи", а именно содержимое их LOB полей). ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Пока записи не удаляем... поэтому вроде SHRINK SPACE пока незачем использовать...
Самая большая схема, как раз использующая CLOB-ы : 161Gb (51% от всего) В ней таблица, использующая CLOB-ы : 136Gb (43% от всего). Вот и хочу предложить начальству удалить записи за старые месяцы (оставить 2 последних)... Может быть и зря рыпаюсь. Как говорится инициатива всегда наказуема. Но Объем TABLESPACE растет. А для заказчика мы не выводим инфу из CLOB-ов. Это наше внутреннее (запрос-ответ сервисов). А объем здоровый. Когда нибудь заказчик все равно спросит. Почему растет объем занимаемый БД. На всякий, оставлю для себя: Для секционированной таблицы команды с shrink и truncate имеют вид: ALTER TABLE имя таблицы MODIFY PARTITION имя партиции LOB (имя LOB столбца) (SHRINK SPACE); ALTER TABLE имя таблицы TRUNCATE PARTITION имя партиции UPDATE GLOBAL INDEXES; Исправлено 1 раз(а). Последнее : ВладимирС, 02.10.17 14:35 |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну, если это чисто служебная инфа то да, стоит удалять (и вообще зачем её в БД держать то?). И, я так понимаю, что именно запись целиком удаляется. Но от SHRINK SPACE вряд ли избавится выйдет - для LOB сегментов особенно (я сомневаюсь что у вас "запросы и ответы" укладываются в размер 4Кб, и потому реально хранятся IN ROW). Можно, конечно с RETENTION поиграться - особенно если по логике в таблице отсутствуют операции UPDATE (ну хотя-бы для LOB полей).
Можно глянуть более конкретно размеры всех соответствующих сегментов для этой таблицы. Ну и потом во время тестирования "удаления устаревших" через такого рода запрос смотреть что именно уменьшает занимаемый размер, а что хотя-бы приводит к "повторному использованию" места (отсутствию роста после удаления).
------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
Спасибо большое за разъяснения...
|
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
У меня проблема...
Кинули на следующий проект... Задание, написать выполняемый скрипт на linux, который: 1. создавал дамп схемы на сервер-проде 2. копировал дамп на сервер-стейдж 3. восстанавливал схему на сервер-стейдж. Но что плохо. Я плохо знаю команды linux... Вот и прошу помощи... Что нацарапал (этот скипт будет выполняться на сервере-СТАЙДЖ):
|
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Для ssh можно (наверное и нужно для подобных случаев) задать авторизацию через rsa-ключи - если ключ будет создан без passphrase то никаких паролей вводить не потребуется. При том зачем запускать сессию от имени рута, если выполняемая команда должна работать от имени другого аккаунта? От имени oracle и нужно было бы создавать ssh сессию и НЕ использовать вообще su/sudo.
Нда, куда только и не пихают файлы... Но я первый раз вижу чтобы использовали для этого папку log оракла Последние лет 10 для оракла производитель настойчиво рекомендует использовать не обычный ("старый" как его ещё называют) импорт/экспорт, а DataPump импорт/экспорт - он управляется и со стороны самого сервера, и с консольных утилит impdp/expdp. Там выгрузка "файла" идёт в объект directory, который может быть задан как "внешний" - т.е. по сути указывать на объект directory второго сервера (т.е. экспорт СРАЗУ будет идти в файл на целевом сервере для импорта). Кроме того для этого режима (через datapump) в принципе вообще можно настроить переливку без создания dmp файла! Я сам не пробовал, но примеров и документации хватает. IMHO это всяко лучше чем геморрой с ssh и перекачкой файлов. Конечно же оба сервера должны быть в твоей "юрисдикции" (полагаю так оно и есть, раз уж под рутом работаешь), ну и каким-то образом видеть друг друга через сеть (даже если они в разных сетях, вполне можно соорудить туннель через тот же ssh - и даже не "прямой", а через твой компьютер, хотя это и сложнее). ------------------ WBR, Igor |
Re: Oracle. Администрирование. | |
---|---|
ВладимирС Автор Сообщений: 1693 Дата регистрации: 03.11.2005 |
"через rsa-ключи" - надо посмотреть. Спасибо. Плохо, то что для этого проекта не я админ. Просил я пароль от оракла, но в нашей конторе и вышестоящие не знают. Они всегда работают от имени root. Говорю, давайте создадим новый пароль для оракл и передадим заказчику. или пусть они нам скажут пароль от оракла. Но на это мне ответили, чтобы я не совался и работал в ихнем стиле. Как поставили оракл на машину, я не понимаю. Но вот так настроена Directory DATA_PUMP_DIR. Тут немножко разъяснения требуются. Как я понял, создам еще одну дирректорию. Но как я пропишу дирректорию другого сервера ? Ссылочку бы на посмотреть. Хм... интересно. Надо посмотреть. Я не в их сети. Работаю через ssh под root. Я описал выше. Исправлено 4 раз(а). Последнее : ВладимирС, 20.02.18 07:15 |
Re: Oracle. Администрирование. | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ты работаешь не от root а от oracle. Хотя и соединяешься по ssh как root Для использования аутентификации ОС (логин без пароля) достаточно (для линукса) чтобы аккаунт был в группе dba. НО это предполагает коннект as sysdba, который не должен использоваться для 99% административных задач (в т.ч. и создания дампов). Равно как и в самом линуксе аккаунт root НЕ ДОЛЖЕН использоваться для большинства административных задач. Менять "их стиль" не обязательно, но создать для своих нужд и линуксовый аккаунт, и DB аккаунт (с правами IMP/EXP_FULL_DATABASE, при том без SYSDBA) я думаю вполне можно. Если они дали тебе root, то по сути дали полный карт-бланш - делай что считаешь нужным Всё равно с вероятностью 99% они ничего и не заметят (т.к. у них явно нет ни sysadmin ни dba - иначе никакого root-а ты бы никогда не получил ). Узнавать и тем более менять "их" пароли совершенно точно не нужно. Ну что ж, бывает. Ручки золотые, но растут из Ж... Впрочем это не суть важно. Во-первых совсем не сложно сделать для себя другую directory - указывающую на более адекватную точку хранения дампов (в зависимости от физической конфигурации storage на сервере), да хоть бы и в home папку того юзера под которым ты будешь работать. во-вторых для "сетевого" импорта это вообще не принципиально, т.к. вся работа происходит на "целевом" сервере, соединение к "источнику" будет через dblink, и использоваться будет directory целевого сервера - да и то лишь для файлов лога, сам дамп "как файл" не создаётся. Чтобы это взлетело, достаточно лишь обеспечить возможность соединения с сервером-источником (да через тот же ssh, но непосредственно с "целевого сервера" - с пробросом портов, если это необходимо) - т.е. просто создать в той БД пользователя с нужными для экспорта правами и всё. Если есть доступ (не административный) к собственно "рабочей" схеме, то и этого должно хватить. тут описано предельно кратко Директория нужна лишь на принимающей стороне для записи лога операции. Через ssh (тем более что у тебя root права - т.е. AllowTcpForwarding, если что, сможешь поправить на удалённой стороне) можно настроить туннель - ходить на 1521 удалённого сервера через, к примеру, 1522 хоста где запущен ssh-клиент. Если твой БД-сервер имеет доступ "наружу" (не наоборот, а именно он может выходить вовне, "в интернет" грубо говоря) то запускать ssh клиента можно прямо на нём, тогда прописав в tnsnames ещё один алиас на localhost:1522 и подняв туннель ты по сути получаешь доступ к внешней БД (не к серверу как линукс-машине, а именно к работающему там экземпляру оракла). ------------------ WBR, Igor |
© 2000-2024 Fox Club  |