Металинк oracle что это

Обновлено: 05.07.2024

В соседней теме багу Оракла обсуждают. Надо бы на металинке читать, а доступа нет.
Вот мы при покупке СМ платим такие деньги, являемся официальными пользователями Oracle, так почему Сервис+ не предоставляет доступа на этот ресурс?
Заплатить заплатили, а поддержки нет? Или все же у кого-то есть?

Надо понимать, что поддержка Супермага и поддержка Оракла - разные вещи, за разные деньги. И металинк никто не обещал.
Приличная контора себе металинк покупает сама, если это действительно необходимо. А так по идее не оракл же будет ошибки лечить, а Сервис Плюс.

Ну у Сервис+ про ORA-600 бесполезно спрашивать.
И с Оракла я не собираюсь что-то спрашивать, просто доступ к нотам и патчам.

Если я не ошибаюсь, когда просто Оракл покупают, дается бесплатная поддержка на год чтоли. Вот я про нее и говорю. Оракл в комплекте СМ мы покупаем, а поддержку не получаем.
Может лучше тогда покупать СМ отдельно, Оракл отдельно?

leonid ➤ Может лучше тогда покупать СМ отдельно, Оракл отдельно?

Супермаг будет по той же цене, скидку тебе никто не даст.
Ну а Оракл стоит отдельно очень недешево, причем большая часть стоимости - стоимость поддержки.

leonid ➤ Если я не ошибаюсь, когда просто Оракл покупают, дается бесплатная поддержка на год чтоли. Вот я про нее и говорю.

Ошибаешься, техсаппорт покупается отдельно, а это условие доступа на металинк. А почему с ORA-600 к С+ не обращаешься? Или они по договору не обязаны это лечить? (честно скажу - не интересовался)

Mtirt ➤ Ну а Оракл стоит отдельно очень недешево

Oracle Database Standard Edition
Лицензия на 1 пользователя $ 265.
Это не дорого по сравнению с СМ.

leonid ➤ Oracle Database Standard Edition
Лицензия на 1 пользователя $ 265.
Это не дорого по сравнению с СМ.

Vovantus ➤ а в супермаге только один пользователь работает?

Минимум трое, учитывая сервер лицензий и кассовик. Но мне интересно было бы узнать про цены на саппорт.

Да я не об этом.
Я о том, что благодаря Сервису+ много пользователей подсели на очень не простую СУБД, а поддержки (металинк) не получили.

Metalink - это расширяемый формат файла метаданных , который описывает один или несколько компьютерных файлов, доступных для загрузки . Он определяет файлы, соответствующие языку пользователя и операционной системе ; облегчает проверку файлов и восстановление после повреждения данных ; и перечисляет альтернативные источники загрузки ( зеркальные URI ).

СОДЕРЖАНИЕ

История развития

Клиентские программы

Клиентские библиотеки

  • libmetalink ( MIT License ) библиотека Metalink написана на C . Он обеспечивает анализ XML-файлов Metalink для программ, написанных на C, и использует Expat (библиотека) или libxml2 . Он не обрабатывает фактическую загрузку файлов. Он используется cURL и другими клиентскими программами.
  • metalink-checker ( GPL ) - это программа для загрузки из командной строки, написанная на Python, которая поддерживает загрузку из нескольких источников и контрольные суммы блоков, а также проверку зеркал. Его также можно использовать как библиотеку Python .

В использовании

Mandriva Linux интегрировала Metalink в управление пакетами с urpmi и aria2. Fedora интегрировала Metalink в управление пакетами с помощью yum . openSUSE интегрировал Metalink в управление пакетами с помощью ZYpp и aria2.

Wubi , установщик Ubuntu для Windows , использует Metadl ( LGPL ) для загрузки образов Ubuntu ISO и пользуется преимуществами функций Metalink, обеспечивающих более высокую доступность и надежность. Если при загрузке есть ошибки, они исправляются вместо перезапуска большой загрузки.

Appupdater ( GPL ) для Windows «похож на apt-get или yum в Linux. Он автоматизирует процесс установки и поддержки актуальных версий программ».

Платформа для размещения программного обеспечения и совместной работы Origo генерирует металинки для всех размещенных релизов.

Следующие дистрибутивы на основе FreeBSD используют Metalink для распространения образов ISO : DesktopBSD , MidnightBSD и TrueOS .

Сравнение возможностей клиента Metalink

Руководство, какие функции Metalink поддерживают клиенты:

Несколько выпусков / 39,99 долл. США Professional

В настоящее время клиенты не поддерживают rsync .

Поколение Metalink

Metalink отформатирован как XML, поэтому его можно создать вручную или создать с помощью библиотеки XML, что полезно для автоматизации. Эти инструменты созданы специально для Metalink.

Пример файла Metalink 4.0 .meta4

Файлы Metalink 4.0 имеют расширение .meta4 и представляют собой текстовые файлы XML . Они обслуживаются с типом Интернет-носителя application / metalink4 + xml .

Пример файла Metalink 3.0 .metalink

Файлы Metalink 3.0 имеют расширение .metalink и представляют собой текстовые файлы XML .

Администрирование Oracle. Программирование на PL\SQL. А также все что касается лидера разработки корпоративного ПО.

пятница, мая 11, 2007

Oracle Metalink и наш SR

Кто регулярно сюда заглядывает, те помнят о проблеме, по которой мы обращались на Metalink. Так вот проблема разрешилась. мной. Далее подробнее.
Во-первых: по той простой причине, что утилита сбора информации (кажется RDA) собрала все данные о всех инстансах на этом сервере, мы подумали, что оракловые спецы параметры конкретных экземпляров проанализировали, и сами сравнивать досканально не стали.
Во-вторых: забавно (почему, опишу чуть ниже), но пересоздание инстанса не помогло.
Итак, спец с Oracle Metalink предположил, что это действительно баг, который нигде пока не описан и надо бы его проработать, однако попросил поставить последний PatchSet 9.2.0.8, а вдруг там уже поправили ("Kindly note that this issue may be already fixed in 9.2.0.8"). К сведению, на том сервере был 9.2.0.5, после возникновения проблемы пропатчили до 9.2.0.7 (восьмого на тот момент не было, а качать немало). Короче все же поставили на закачку восьмой, но я решил сравнить параметры двух баз на одном сервере (теоретически все параметры за исключенем распределения памяти и всяких мелочей должны были быть идентичны). И нашел забавный момент (наименования инстансов изменены):
(DBError падает на обновлении MView, DBWorks работает без проблем):
DBWorksDBError
circuits0170
mts_circuits0170
mts_servers01
mts_sessions0165
shared_server_sessions0165
shared_servers01

Очень похоже на то, что DBError работает в Shared Mode, но(!) на самом деле это не так. Вобщем как-то так получилось у моих предшественников, что параметры многие настроены под работу в режиме разделяемого сервера, но в этот режим он не переключен.

Изменил значения этих параметров в нуль и все заработало!

  • проблема решена до решения металинка;
  • для решения не понадобился тяжеловесный патчсет;
  • спецы толком не глядят в инфу, собранную их RDA;
  • не стоит целиком и полностью полагаться на Oracle Metalink, в первую очередь стоит включать свой моск и пытаться решить проблему самому - быстрее и дешевле;
  • баг они так и не открыли, просто закрыли реквест, за что обидно. ведь если кто еще наткнется, будут заново проходить мой путь, и не факт что пройдут быстро.

10 комментариев:

"Очень похоже на то, что DBError работает в Shared Mode, но(!) на самом деле это не так"
Что значит не так? Чему равен был параметр MAX_SHARED_SERVERS?

20, он и сейчас 20
-
все параметры указывали на то, что работает в Shared:
DISPATCHERS=(PROTOCOL=TCP) (SERVICE=dberrorXDB) - оно и сейчас так
MAX_DISPATCHERS=5 - и сейчас так
MAX_SHARED_SERVERS=20 - опять же сейчас так
SHARED_SERVERS = 1 - ну сейчас 0

однако, не смотря на все это DBCA говорил, что сервер в DEDICATED и в v$shared_server не было ни одной записи

всё-таки переводить сервер в DEDICATED не совсем спортивно. (SERVER=shared) установлен в tnsnames.ora на сервере?

DEDICATED/SHARED каждому свое, у нас одновременных подключений к той базе 2-3, частота подключений низкая, какой смысл там крутить Shared?
А по поводу tnsnames.ora, там не был установлен режим, т.е. выбирался на усмотрение сервера. А в v$session ни разу не было замечено подключение в shared mode.

"А в v$session ни разу не было замечено подключение в shared mode."- А none в поле
server был?

кстати, только что проверил для xe под linux в v$shared_server при SHARED_SERVERS = 0 две записи, при увеличении на на 1 SHARED_SERVER=3 и т.д.

"DEDICATED/SHARED каждому свое, у нас одновременных подключений к той базе 2-3, частота подключений низкая, какой смысл там крутить Shared?"- я не предлагаю крутить если не нужно, я предлагаю решить проблему до конца(в тестовом режиме). Чтобы не было проблем при 2000 одновременных подключений. Вы потратили кучу времени и когда для выявлении стины осталось совсем немного остановились! У меня SQL Server за 12 лет эксплуатации никогда не падал! Вопрос: "Зачем тогда Oracle со всеми наворотами при двух-трёх пользователях?"
Я подхожу к проблеме со стороны разработчика и для меня система должна работать одинаково и при 2-х и при 2000-х пользователей, если конечно физические возможности позволяют.

Дискуссия немного затянулась, ну да ладно.
1. А none в поле server был? - неа, только DEDICATED. Я ж говорю, если смотреть на работающую базу, то сказать, что она работает в SHARED нельзя. Да и проблема совсем в другом была. У нас есть база той же 9.2.0.7 версии в Shared Mode, тоже обновляются снэпшоты и таких проблем не замечено.
2. "решить проблему до конца(в тестовом режиме)" - увы, на других базах эта проблема не воспроизводилась, а данная база боевая, и должна работать 24/7, при серьезной необходимости можно ее мучать после окончания рабочего дня.
3. "Зачем тогда Oracle со всеми наворотами при двух-трёх пользователях?" - у нас крутится 6 боевых баз, 4 в Новороссийске, 2 в Москве, Москва с Новороссийском реплицируются, в Ново нагрузка гораздо больше чем в Москве на завалившейся базе. Кроме того есть специфичные приложения, которым нужен оракул.

В дополнение: мне не нужен был Shared Mode, это, видимо, до меня немного не докрутили спецы с Siemens, которые здесь свою систему настраивали давным давно, в ту пору, когда я совсем в другом месте работал. После них много чего недокрученного недоделанного осталось, но таких костылей я не ожидал.

Не оправдывайся, я же тебя не виню. Просто для себя хочу что-то подчерпнуть из твоего блога. У меня же валящейся базы нет для экспериментов, вот тебя и пытаю.
И последний вопросик. Патчи Оракла реально когда-нибудь исправляли подобные проблемы?

Если возникала критическая ситуация, то она решалась либо собственными силами либо силами саппорта. Патчсеты же для нас решали проблемы, которые мы всегда могли обойти, т.е. конечно были случаи когда чего-нибудь напишешь, а потом вспоминаешь как у тебя падала база ранее на этом коде (который после этого приходилось переписывать), а сейчас ошибка и все работает (ну кроме кода :).

На самом же деле помню только один случай, когда один девелопер влепил ведение логов, где использовалась автономная транзакция, по всей базе, проверил свои модули и всё, а я потом разбирался почему же у меня моя подсистема вываливается на DML-операциях. Как потом выявилось, есть проблема обработки автономной транзакции внутри распределенной транзакции. В версии 8.1.6 сессия просто отваливалась после такой операции, а после апдейта до 8.1.7 в подобной ситуации просто стал вываливаться эксепшн, система продолжала работать далее.

Для предоставления услуг технической поддержки программного обеспечения Oracle контактному лицу заказчика сообщается регистрационный номер ( CSI - Customer Support Identifier ) который используется для определ ения уров ня доступа и набор а услуг тех.поддержки предоставляемых через web-портал My Oracle Support.

При регистрации Вам нужно заполнить web-форму в которой звездочкой ( * ) отмечены обязательные поля:

Заполнять эту форму, желательно, на английском языке . При вводе имени и фамилии, рекомендуем сверить их написание с загранпаспортом .



Следующие пользователи которые отправляют запросы на на регистрацию (добавление) SCI , получаю т подтверждение от администратора SCI. У администратора SCI на страниц е Settings есть дополнительное меню администрирования пользователей — Administrative , которое включает страницы:

  • ManageUsers: для управления пользователями — их ролями ( User или Administrator ) и правами, например создавать Service Request или загружать обновления ПО.
  • Pending Users Requests: для управления запросами пользователей на регистрацию SCI, ожидающих подтверждения.
  • Support Identifiers: для управления CSI

Если у пользователей возник ают проблемы при регистрации CSI , они могут обраща ться к администратору этого CSI. Чтобы узнать email адрес администратора CSI пользователь может кликнуть по ссылке View в столбце Administrators таблицы Support Identifiers на страниц е My Account .

Часто задаваемые вопросы

Как поменять имя моей учетной записи (email) или пароль ?


Нужно войти в web-портал My Oracle Support , перейти на web-страницу (вкладку) Settings , выбрать из меню My Account , и в секции Personal Information по ссылке перейти на страницу профиля Вашей учетной записи Oracle. На странице Вашего профиля используйте ссылки Edit для редактирования Username/Email или пароля Password.

Что делать если я забыл свой пароль ?

C SI который Вы вводите не существует:

Почему у меня нет возможности открыть Service Request (кнопка « Create SR» не активна) ?

Приходилось ли Вам реализовывать нестандартные решения? А в Oracle? Мне бы хотелось рассмотреть использование техник, позволяющих лучше узнать принципы работы СУБД, а в совокупности предоставляющие удобство для разработчика.


Намного удобнее, выполнять разработку приложений баз данных в едином пространстве, а результаты переносить по ландшафту системы в фоновом режиме, автоматически регистрируя производимые изменения.

Пример выполнения обновления на сервере разработки

Пролог

Вы встречали вредных DBA? А работали с такими? На самом деле, обе стороны (Developer vs. DBA), добиваются одного результата, работоспособности системы, но с разных сторон. Впрочем, когда система расширяется, децентрализуется, но сохраняет целостность в реализации, то поддержка консистентного состояния программной оснастки может начать доставлять серьезные неудобства. Появляются серверы разработки, тестирования, «продуктива» — и все это замечательно, но всех их нужно обновлять.
В Oracle есть инструменты казалось бы похожие на рассматриваемый:
• Audit
• Oracle Streams
• Alert
Но все они выполняют другие функции. Одни, обеспечивают аудит изменений, другие синхронизируют данные. А мне бы хотелось действовать более прозрачно, вот например:

Теперь все мои действия продублированы на сервере ‘prod’. А может быть, даже так:

И, скажем, семь серверов создали таблицу «A». Здорово? Тогда – поехали.

Подготовка

Выполним соединение с базой данных от имени пользователя имеющего достаточные привилегии для последующих действий:


Предполагается что пользователь, выполняющий обновления, не должен иметь доступа к самой системе обновления, впрочем, как и сама система не привязывается к целевой схеме, следовательно, может использоваться универсально. Поэтому создадим нового пользователя:


Поскольку статья не об ограничении прав новых пользователей:


Опустив рассуждения о проводимых изысканиях, скажу, что самым сложным оказалось получение анонимного PL/SQL блока, который приводился в примере выше. Естественно, одни действия в конечном итоге порождают другие, так например, всё тот же блок из примера, выполнит insert, но на самом деле может быть и не выполнит! Ведь выполняться он будет на другом сервере. Поэтому нас будет интересовать именно анонимный PL/SQL блок, а не последствия. Паблик синоним V$SQL или представление V_$SQL на которое он ссылается, хранит все запросы, выполнявшиеся на сервере. Попробуем найти в нём нашу цель:

Действительно, именно мой анонимный блок находится там где положено. Конечно же, SQL_ID выполняя мой пример, будет другой, но принадлежит ли он мне? Проверим:


Выполнившийся блок, удалось найти, но мне бы хотелось узнать, кем он выполнен, а точнее узнать, что именно я выполнял его в определенный момент времени. Другое представление V_$SESSION, сможет мне в этом помочь:
select sql_id, prev_sql_id from v$session;
Тут нужно пояснить, что синоним v$session предоставляет доступ к VIEW, а доступ для пользователя организуется командой:
grant select on v_$session to upd;
Дело тут в том, что тип представление v_$session является FIXED VIEW, поэтому давать права на его синоним – запрещено. Впрочем, если выдавать права на синоним, скажем таблицы, сами права выдаются на таблицу, а НЕ на синоним.
Так что же там с запросом? Ах да, нужно ограничить выборку текущей сессией:


Как это у Вас, не получается? Ни SQL_ID ни PREV_SQL_ID – не содержат найденного ранее идентификатора 753c9f808k8hh? Естественно! SQL_ID содержит идентификатор только что выполненного запроса, а PREV_SQL_ID скорее всего хранит идентификатор запроса:

Я надеюсь, что читатель последовательно выполнял запросы, как я их приводил и поэтому сразу не нашел того что ожидалось. Для того что бы убедиться, что результат будет как и указано, нужно выполнить последовательно анонимный блок и запрос к представлению. Как бы то ни было, считаю, что еще один этап изысканий пройден. Теперь мы имеем исходный текст анонимного блока, и знаем, что он был выполнен именно нами.
К сожалению, решение, которое автоматизирует связывание, мне не нравится, ведь необходимо после определенного момента, запомнить все возможные анонимные блоки выполняющиеся пользователем, а представления хранящего историю сессии пользователя не существует? Или существует? Впрочем я не нашел и на данный момент, предлагаю следующий подход. Создадим таблицу, которая будет хранить идентификатор сессии, которая заинтересована в прослушивании и джоб, опрашивающий эту таблицу и сохраняющий историю сессии.

«Что за названия полей второй таблицы?» — спросил бы я. Несмотря на то, что это не имеет веского оправдания, но пытавшись минимизировать нагрузку создаваемую джобом, я добрался до представления более высокого уровня sys.x_$ksuse которое содержит достаточную информацию о целевой сессии. Делая закладку на будущее, в таблицу будут сохраняться еще несколько полезных полей, помимо необходимых: KSUSENUM (SID) и KSUSESQI (SQL_ID). Хорошо будет вынести тело джоба во внешнюю процедуру, и не добавлять ее в пакет, дабы избежать ошибок, если пакет будет не валиден:


Идея обработки, заключается в том, что бы записывать в историю сессии только тогда, и только то что выполняется пользователем в режиме обновления. Теперь можно создать джоб, прослушать сессию пользователя и проверить результат:

Как видно из результата запроса к V$SQL анонимный блок попал в таблицу лога записанный туда джобом. Для теста, я обращался к столбцу KSUSEPSI лога (предыдущему запросу) ввиду того, что мне приходилось выполнять команды очистки таблицы сессии в момент прослушивания. В дальнейшем, это так же окажется некоторым недостатком, но «обрывание» прослушивания мы исключим из результирующего набора выполняемого на удаленном сервере.
Теперь необходимо собрать DLL команды, которые так же могут выполняться при обновлении. Но здесь происходит противоречие, зачем собирать DDL – если их соберет джоб? К сожалению, он их не соберет, так как DDL не является запросом, а следовательно в v$session не отразится. Для этих целей Oracle предоставляет триггеры уровня СУБД, которыми можно воспользоваться. Выполняемые DDL, запишем в новую таблицу, а по аналогии с джобом, создадим процедуру и триггер выполняющей её:

Дополнительная таблица, и её тип (GLOBAL TEMPORARY хранить данные до дисконнекта), выбраны из следующих соображений: джоб собирающий информацию о сессии, работает в сессии отличной от той, которая выполняет скрипты обновления, следовательно запросы записанные в нее стали бы недоступны сессии исполнителя; предоставить Oracle очистку таблицы после обновления; DDL триггер, срабатывает в той же сессии, в которой выполняется DDL, следовательно в этом случае записывать можно сразу в таблицу буфера; сохранение данных таблицы после коммита обусловлено тем, что DDL выполняет молчаливый коммит.
Важно обратить внимание на то, что процедура объявлена с директивой AUTHID DEFINER, которая позволит записывать действия с правами пользователя UPD, которые могут быть большими, чем у вызывающего. Далее производится определение длинны DDL и сохранение буферов в поле CLOB.
Триггер выполняется после (AFTER) DDL, что подразумевает успешное выполнение команды, до записи в буфер.
Подводя итоги изысканий, теперь имеются все возможные типы операций, подлежащие выполнению на обновляемой базе и можно приступить к завершающему этапу – инструменту выполнения обновлений.

Реализация

Мне не нравятся публикации, которые после длительного рассуждения и подготовки заканчиваются чем то вроде: «А теперь, (если не дурак) тебе должно быть ясно как доделать оставшуюся фигню». Конечно же тут дураков – нет, все давно поняли что нужно сделать дальше. Но я приведу свою текущую реализацию, несмотря на то, что её можно считать бета версией. Теперь много кода, а затем пояснения:


К ранее созданным таблицам, добавились еще две, одна из которых используется для визирования успешно выполненных обновлений, а вторая для настройки соединения с удаленной базой Oracle.
Пакет объявлен с директивой AUTHID CURRENT_USER – что приведет к выполнению процедур пакета, с правами пользователя вызывающего пакет. Теперь, о всех процедурах пакета:
procedure SetSession(u_sid number, u_remove boolean default false) – используя автономную транзакцию, записывает текущий идентификатор сессии в таблицу инициирующую прослушивание.
function JobNumber return number – получает идентификатор джоба прослушивателя.
procedure JobRun – проверяет существование джоба.
procedure SetChannel(u_alias varchar2) – получает настройки удаленного соединения и записывает их в локальные переменные пакета.
procedure CancelUpdate – стирает настройки и очищает временные таблицы.
procedure BeginUpdateChannel(u_alias varchar2) – объединяет вызовы подготовительных процедур и начинает прослушивание.
procedure PrepareUpdateChannel – завершает прослушивание и дописывает в таблицу буфер собранные джобом запросы сессии. Я для собственных нужд, не слишком стараясь, отбрасываю при этом DML, select и встреченные в процессе тестирования служебные команды, а так же вызов процедуры PrepareUpdateChannel который тоже записывается в лог сессии.
procedure DropObject – вспомогательная процедура для очистки.
procedure ExecRemote – выполнение блока на удаленном сервере. Эта процедура реализует один из ключевых моментов механизма. Тут пакет dbms_sql вызывается на удаленном сервере.
procedure EndUpdateChannel – применение обновления. И об этом отдельно.

Для конечного пользователя можно создать процедуры обертки, с директивой AUTHID DEFINER и раздать права вызывать их нужным пользователям:

Читайте также: