:: Не фоксом единым
Re: Oracle. Администрирование.
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
А просто ХП или view вызвать на линкованном сервере? почему обязательно нужно вернуть курсор, а не простой RecordSet (в Оракле полный ноль, поэтому исхожу из общих представлений)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
PaulWist
А просто ХП или view вызвать на линкованном сервере? почему обязательно нужно вернуть курсор, а не простой RecordSet (в Оракле полный ноль, поэтому исхожу из общих представлений)
Курсор это и есть RecordSet...
Выше и показываю, что сделал на линковочном сервере процедуру с входным параметром... Протестировал на нем. Работает. Но с другого сервера, у которого сделан dblink (к тому серверу) не могу получить результат.
Каким способом получить его, я и спрашиваю.
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
Сначала просто составлял запросы в которых join-ил таблицы через dblink. Но вижу, что это идеологически неправильно, т.к. на сервере с которого запускаю такой запрос выполняется очень долго, если таблицы большие. План создастся не может... вытаскивание скорее всего всех данных из таблиц dblink-а...
Да, если в запросе соединяются локальная и удалённая таблица, и, к примеру, тебе очевидно что из удалённой нужно всего 2 подходящие записи, то извлечена по дблинку будет всё равно таблица целиком.
ВладимирС
Решил попробовать создать табличную функцию и вытащить ее тоже через dblink
Объекты тоже не работают через dblink.
ВладимирС
Как вытащить данные ?
Сделать представление на стороне удалённой БД. Представление может быть и из таблиц, и из табличных ХП. Для параметризации (т.к. зачастую требуется параметризовать такого рода представления) рекомендуется использовать переменные контекста. Теоретически там и GTT можно подключить, но как-то оно стремновато. По крайней мере напрямую использовать. Хотя люди вроде справлялись...
asktom.oracle.com
Том для примера использует штатную client_info, но я думаю что лучше будет завести в этой схеме свой контекст (соответственно и пакет управляющий переменными) и использовать осмысленные переменные


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
PaulWist
А просто ХП или view вызвать на линкованном сервере? почему обязательно нужно вернуть курсор, а не простой RecordSet (в Оракле полный ноль, поэтому исхожу из общих представлений)

Igor Korolyov
Сделать представление на стороне удалённой БД.

Именно View на линковочном сервере и пока выход...
Спасибо большое... Запрос при обращении к View на линковочном сервере (ну соотвественно проанализировав план и построив недостающие индексы) работает за секунду... Круто...
ВСЕМ СПАСИБО...:bodr:

Видимо чего-то зациклило в голове...
Правда дома проблемы (видимо из-за этого)...
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
А все началось с того, что прикрепили к другому проекту, а там свое начальство...
Начало указывать, как делать, типа работаем через процедуры...
Я не заморачиваясь начал именно с них...
Не пошло...
Тут по старому проекту заказчик звонит. Переключился. Решил проблему. Опять вернулся к прикрепленному проекту...

С начальством надо просто соглашаться (как с женщиной, не в обиду тут присутствующим), а делать по своему.
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
С начальством надо просто соглашаться (как с женщиной, не в обиду тут присутствующим), а делать по своему.
Это чревато... Я про начальство
Лучше разводить бюрократию - т.е. делать всё же "как говорят", но регулярно писать докладные (сначала непосредственному начальству, не поможет - копию "через голову", и так не поможет - вплоть до "генерала" - если и это не помогает - значит "надо валить"), где излагать проблемы вызванные дуроломством этих самых начальников-советчиков, и, желательно, предлагать адекватные решения.
Т.к. иначе ты в любом случае будешь крайним - а оно тебе надо?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Сделать представление на стороне удалённой БД. Представление может быть и из таблиц, и из табличных ХП. Для параметризации (т.к. зачастую требуется параметризовать такого рода представления) рекомендуется использовать переменные контекста. Теоретически там и GTT можно подключить, но как-то оно стремновато. По крайней мере напрямую использовать. Хотя люди вроде справлялись...
asktom.oracle.com
Том для примера использует штатную client_info, но я думаю что лучше будет завести в этой схеме свой контекст (соответственно и пакет управляющий переменными) и использовать осмысленные переменные
Что-то я плохо понимаю про параметризированную View... в оракле...
Сделал пример на dblink-овском сервере вьюху:
CREATE OR REPLACE FORCE VIEW EGRIP_IMPORT.V_EGRIP_GET_PERSON
(
INN,
LAST_NAME,
FIRST_NAME,
PATRONYMIC,
OGRNIP
)
AS
SELECT EG.INNFL AS INN,
FL.FAMILIA AS last_name,
FL.IMYA AS FIRST_NAME,
FL.OTCHESTVO AS PATRONYMIC,
EG.OGRNIP
--,EG.DATA_VYP, EG.DATAOGRNIP, EG.ID
FROM EGRIP_IP EG LEFT JOIN EGRIP_FL FL ON (EG.ID = FL.IP_ID)
WHERE EG.CODEBYDIP = 1
AND FL.DATA_VYP = (SELECT MAX (FL1.DATA_VYP)
FROM EGRIP_FL FL1
WHERE FL1.IP_ID = FL.IP_ID)
AND NOT EXISTS
(SELECT *
FROM EGRIP_IP EG1
WHERE EG1.INNFL = EG.INNFL
AND EG1.OGRNIP = EG.OGRNIP
AND EG1.DATA_VYP > EG.DATA_VYP)
AND NOT EXISTS
(SELECT *
FROM EGRIP_IP EG1
WHERE EG1.INNFL = EG.INNFL
AND EG1.DATAOGRNIP > EG.DATAOGRNIP);
На своем сервере вызываю:
SELECT INN,LAST_NAME,FIRST_NAME,PATRONYMIC,OGRNIP FROM V_EGRIP_GET_PERSON@EGRIPDB WHERE INN = '772976281908';
выполняется за 0.1 сек. вроде как круто...
Но мне ребятам надо обернуть в процедуру. для теста сделал:
CREATE OR REPLACE PROCEDURE ENT_PTS.p$ps#egrip_get_person (
p_inn VARCHAR2,
p_cur OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_cur FOR
'SELECT INN,LAST_NAME,FIRST_NAME,PATRONYMIC,OGRNIP FROM V_EGRIP_GET_PERSON@EGRIPDB WHERE INN = ' || p_inn;
END;
Вижу что плохо, оракл долго анализирует эту ерунду...
Вызываю:
DECLARE
p_inn varchar2(50) := '772976281908';
BEGIN
p$ps#egrip_get_person(p_inn,:p_cursor);
END;
выполняется за 6 секунд... офигеть как долго...
Что то надо параметризированную вьюху делать...
Но не умею...
Может поможешь на примере...?



Исправлено 1 раз(а). Последнее : ВладимирС, 28.09.17 15:19
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
ВладимирС
Но мне ребятам надо обернуть в процедуру. для теста сделал:
CREATE OR REPLACE PROCEDURE ENT_PTS.p$ps#egrip_get_person (
p_inn VARCHAR2,
p_cur OUT SYS_REFCURSOR)
IS
BEGIN
OPEN p_cur FOR
'SELECT INN,LAST_NAME,FIRST_NAME,PATRONYMIC,OGRNIP FROM V_EGRIP_GET_PERSON@EGRIPDB WHERE INN = ' || p_inn;
END;
Вижу что плохо, оракл долго анализирует эту ерунду...

1. Смотри где различие в планах выполнения.

2. Опять же в синтаксисе не силён, а разве нельзя сразу написать:

OPEN p_cur FOR
SELECT INN,LAST_NAME,FIRST_NAME,PATRONYMIC,OGRNIP FROM V_EGRIP_GET_PERSON@EGRIPDB WHERE INN = p_inn;


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
PaulWist
2. Опять же в синтаксисе не силён, а разве нельзя сразу написать:

OPEN p_cur FOR
SELECT INN,LAST_NAME,FIRST_NAME,PATRONYMIC,OGRNIP FROM V_EGRIP_GET_PERSON@EGRIPDB WHERE INN = p_inn;
Спасибо... да можно и так...

Блин... пошли проблемы с UNDO TBSPASE на тестовом сервере... в прикрепленном проекте...
[attachment 28374 UNDO.png]

Я админов не знаю...
Может добавить просто еще один файл ? если к понедельнику не разрулится...
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
undo пространство (впрочем как и любое другое) "само по себе" не уменьшится - если уж доросло до 30Гб то таким и останется.
Далеко не всё то место которое показывается как "занятое" на самом деле занято в undo пространстве. Это пространство для автоматически управляемых сегментов отката.
На "занятость" влияет параметр undo_retention - время сколько времени хранить инфу отката. Возможно что он сильно завышен - тогда система будет пытаться излишне долго хранить "старые данные". Если не используются ретроспективные запросы (flashback), то это самое время должно соответствовать времени самой длительной транзакции - иначе эта транзакция может упасть по ошибке snapshot too old.
Собственно информацию отката активно генерируют команды модификации данных (insert/update/delete). Т.е. если в систему производится массированная заливка информации, то вполне естественно что сегменты отката будут забиты.
Вообще в таких ситуациях не "просто добавляют файл", а выясняю причину такого поведения (прежде всего ищут запросы/транзакции/сессии активно потребляющие undo - т.е. создающие большой объём информации отката). Вполне возможно, что для тестового сервера это совершенно нормально, и на продуктиве таких проблем не возникнет.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
У меня еще вопрос...
В таблицах используются CLOB поля. Естественно они занимаю много места (хотя и используем COMPRESS HIGH). Данные в основном нужны за предыдущий и текущий месяцы.
Вопрос: Если их очищать за предыдущие периоды, то оракл будет использовать освобожденное место ?
А то сжирается TABLESPACE.
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Будет. Но всё зависит от опций хранения LOB и параметров табличного пространства...
Во-первых сервер хранит "старые" LOB данные - либо "некоторое количество версий", либо "некоторое время". Это нужно и для flashback запросов и для обычных запросов - для обеспечения согласованного состояния данных. Управляется опциями PCTVERSION или RETENTION (первое только для BASICFILE, а у тебя явно SECUREFILE используется, раз пишешь про сжатие). Можно задать и максимальный размер для LOB сегмента - тогда сервер начнёт переписывать "старые версии" раньше - при достижении этого лимита. Хотя для динамических систем (когда сложно заранее оценить какой объём данных реально необходим) такой расчёт непросто сделать. Может оказаться проще периодически делать SHRINK SPACE для этого LOB сегмента (тогда "удалённые записи" уж точно станут удалёнными, а не "доступной для запросов прошлой версией").

Во-вторых LOB данные могут хранится in row - т.е. прямо в сегменте где и "обычные" поля хранятся (если размер LOB данных в поле чуть меньше 4К) - это по управлению используемым дисковым пространством сильно похоже на обычное varchar2(4000) поле. Т.е. без реорганизации таблицы такое "пустое место" тоже может не освобождаться (особенно если удаляются не сами "старые записи", а именно содержимое их LOB полей).
Пока записи не удаляем... поэтому вроде SHRINK SPACE пока незачем использовать...
...
LOB (REQUEST) STORE AS SECUREFILE (
TABLESPACE USERS
ENABLE STORAGE IN ROW
CHUNK 8192
COMPRESS HIGH
NOCACHE
LOGGING)
LOB (RESPONSE) STORE AS SECUREFILE (
TABLESPACE USERS
ENABLE STORAGE IN ROW
CHUNK 8192
COMPRESS HIGH
NOCACHE
LOGGING)
...
Все схемы занимают (если смотреть через dba_segments): 314Gb
Самая большая схема, как раз использующая 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
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну, если это чисто служебная инфа то да, стоит удалять (и вообще зачем её в БД держать то?). И, я так понимаю, что именно запись целиком удаляется. Но от SHRINK SPACE вряд ли избавится выйдет - для LOB сегментов особенно (я сомневаюсь что у вас "запросы и ответы" укладываются в размер 4Кб, и потому реально хранятся IN ROW). Можно, конечно с RETENTION поиграться - особенно если по логике в таблице отсутствуют операции UPDATE (ну хотя-бы для LOB полей).

Можно глянуть более конкретно размеры всех соответствующих сегментов для этой таблицы. Ну и потом во время тестирования "удаления устаревших" через такого рода запрос смотреть что именно уменьшает занимаемый размер, а что хотя-бы приводит к "повторному использованию" места (отсутствию роста после удаления).
SELECT *
FROM USER_SEGMENTS
WHERE (SEGMENT_TYPE = 'TABLE' AND SEGMENT_NAME = 'MYTAB') OR
SEGMENT_NAME IN (SELECT SEGMENT_NAME
FROM USER_LOBS
WHERE TABLE_NAME = 'MYTAB'
UNION ALL
SELECT INDEX_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'MYTAB')


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Спасибо большое за разъяснения...
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
У меня проблема...
Кинули на следующий проект...
Задание, написать выполняемый скрипт на linux, который:
1. создавал дамп схемы на сервер-проде
2. копировал дамп на сервер-стейдж
3. восстанавливал схему на сервер-стейдж.

Но что плохо. Я плохо знаю команды linux... Вот и прошу помощи...
Что нацарапал (этот скипт будет выполняться на сервере-СТАЙДЖ):
#!/bin/bash
# Т.к. паролей от oracle нет, то работаю от root
if [ ${USER} != "oracle" ]
then
echo ""
echo "Please run this script as the ORACLE user and try again..."
exit 1
# здесь пытался выполнить команду su - oracle, но после выхода из ssh скрипт иногда начинает выполняться заново. Что нехорошо.
fi
echo "Create Dump File"
ssh ''.phorum_html_encode('root@000.00.000.00').'' "su - oracle -c \"sh /home/oracle/backup/BackUpIppm.sh\""
# 000.00.000.00 - это сервер ПРОД. На нем вызывается скрипт создания дампа схемы и зипование дампа и лога
# Что плохо: заставляет вбить пароль ПРОДа... Но это и логично. Можно как-то задать пароль в скрипте/команде ?
echo "Copy zip-file"
cd /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/log
rm ippmBackUp_0.zip
scp ''.phorum_html_encode('root@000.00.000.00').'':/u01/app/oracle/product/11.2.0/dbhome_1/rdbms/log/ippmBackUp_0.zip /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/log/ippmBackUp_0.zip
# Что плохо: заставляет вбить пароль ПРОДа... Но это и логично. Можно как-то задать пароль в скрипте/команде ?
if find ippmBackUp_0.zip
then
echo "unzip zip-file"
rm ippmBackUp_0.dmp
rm ippmBackUp_0_log_exp.log
unzip ippmBackUp_0.zip
# Надо проверить, что экспорт выполнился правильно
#[ais-opn-db-sracle@aisopn]$ grep -rl 'successfully completed' ippmBackUp_0_log_exp.log
#результат: ippmBackUp_0_log_exp.log
# Ниже скрипт неправильный... Прошу помощи, как правильно его написать
if find grep -rl 'successfully completed' ippmBackUp_0_log_exp.log = 'ippmBackUp_0_log_exp.log'
then
echo "Yes"
else
echo "No"
fi
# Далее пока еще не писал... Но выше у меня возникли проблемы... Если можете подскажите.
else
echo "not found ippmBackUp_0.zip"
fi
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
ВладимирС
Автор

Сообщений: 1693
Дата регистрации: 03.11.2005
Igor Korolyov
Для ssh можно (наверное и нужно для подобных случаев) задать авторизацию через rsa-ключи - если ключ будет создан без passphrase то никаких паролей вводить не потребуется. При том зачем запускать сессию от имени рута, если выполняемая команда должна работать от имени другого аккаунта? От имени oracle и нужно было бы создавать ssh сессию и НЕ использовать вообще su/sudo.
"через rsa-ключи" - надо посмотреть. Спасибо.
Плохо, то что для этого проекта не я админ. Просил я пароль от оракла, но в нашей конторе и вышестоящие не знают. Они всегда работают от имени root. Говорю, давайте создадим новый пароль для оракл и передадим заказчику. или пусть они нам скажут пароль от оракла. Но на это мне ответили, чтобы я не совался и работал в ихнем стиле.

Igor Korolyov
Нда, куда только и не пихают файлы... Но я первый раз вижу чтобы использовали для этого папку log оракла
Как поставили оракл на машину, я не понимаю. Но вот так настроена Directory DATA_PUMP_DIR.

Igor Korolyov
Последние лет 10 для оракла производитель настойчиво рекомендует использовать не обычный ("старый" как его ещё называют) импорт/экспорт, а DataPump импорт/экспорт - он управляется и со стороны самого сервера, и с консольных утилит impdp/expdp. Там выгрузка "файла" идёт в объект directory, который может быть задан как "внешний" - т.е. по сути указывать на объект directory второго сервера (т.е. экспорт СРАЗУ будет идти в файл на целевом сервере для импорта).
Тут немножко разъяснения требуются.
Как я понял, создам еще одну дирректорию. Но как я пропишу дирректорию другого сервера ? Ссылочку бы на посмотреть.

Igor Korolyov
Кроме того для этого режима (через datapump) в принципе вообще можно настроить переливку без создания dmp файла! Я сам не пробовал, но примеров и документации хватает.
IMHO это всяко лучше чем геморрой с ssh и перекачкой файлов. Конечно же оба сервера должны быть в твоей "юрисдикции" (полагаю так оно и есть, раз уж под рутом работаешь), ну и каким-то образом видеть друг друга через сеть (даже если они в разных сетях, вполне можно соорудить туннель через тот же ssh - и даже не "прямой", а через твой компьютер, хотя это и сложнее).
Хм... интересно. Надо посмотреть.
Я не в их сети. Работаю через ssh под root. Я описал выше.



Исправлено 4 раз(а). Последнее : ВладимирС, 20.02.18 07:15
Ratings: 0 negative/0 positive
Re: Oracle. Администрирование.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
ВладимирС
Они всегда работают от имени root
Ты работаешь не от root а от oracle. Хотя и соединяешься по ssh как root
Для использования аутентификации ОС (логин без пароля) достаточно (для линукса) чтобы аккаунт был в группе dba. НО это предполагает коннект as sysdba, который не должен использоваться для 99% административных задач (в т.ч. и создания дампов). Равно как и в самом линуксе аккаунт root НЕ ДОЛЖЕН использоваться для большинства административных задач.
Менять "их стиль" не обязательно, но создать для своих нужд и линуксовый аккаунт, и DB аккаунт (с правами IMP/EXP_FULL_DATABASE, при том без SYSDBA) я думаю вполне можно. Если они дали тебе root, то по сути дали полный карт-бланш - делай что считаешь нужным Всё равно с вероятностью 99% они ничего и не заметят (т.к. у них явно нет ни sysadmin ни dba - иначе никакого root-а ты бы никогда не получил ). Узнавать и тем более менять "их" пароли совершенно точно не нужно.
ВладимирС
Как поставили оракл на машину, я не понимаю. Но вот так настроена Directory DATA_PUMP_DIR.
Ну что ж, бывает. Ручки золотые, но растут из Ж...
Впрочем это не суть важно. Во-первых совсем не сложно сделать для себя другую directory - указывающую на более адекватную точку хранения дампов (в зависимости от физической конфигурации storage на сервере), да хоть бы и в home папку того юзера под которым ты будешь работать.
во-вторых для "сетевого" импорта это вообще не принципиально, т.к. вся работа происходит на "целевом" сервере, соединение к "источнику" будет через dblink, и использоваться будет directory целевого сервера - да и то лишь для файлов лога, сам дамп "как файл" не создаётся. Чтобы это взлетело, достаточно лишь обеспечить возможность соединения с сервером-источником (да через тот же ssh, но непосредственно с "целевого сервера" - с пробросом портов, если это необходимо) - т.е. просто создать в той БД пользователя с нужными для экспорта правами и всё. Если есть доступ (не административный) к собственно "рабочей" схеме, то и этого должно хватить.
ВладимирС
Тут немножко разъяснения требуются.
тут описано предельно кратко
Директория нужна лишь на принимающей стороне для записи лога операции.
ВладимирС
Я не в их сети. Работаю через ssh под root. Я описал выше.
Через ssh (тем более что у тебя root права - т.е. AllowTcpForwarding, если что, сможешь поправить на удалённой стороне) можно настроить туннель - ходить на 1521 удалённого сервера через, к примеру, 1522 хоста где запущен ssh-клиент. Если твой БД-сервер имеет доступ "наружу" (не наоборот, а именно он может выходить вовне, "в интернет" грубо говоря) то запускать ssh клиента можно прямо на нём, тогда прописав в tnsnames ещё один алиас на localhost:1522 и подняв туннель ты по сути получаешь доступ к внешней БД (не к серверу как линукс-машине, а именно к работающему там экземпляру оракла).


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 10 (Гостей: 10)

© 2000-2024 Fox Club 
Яндекс.Метрика