Проверить sql запрос oracle

Обновлено: 06.07.2024

Это выражение возвращает истину, когда по запросу найдена одна или более строк, соответствующих условию, и ложь, когда не найдено ни одной строки.

Обычно предикат EXISTS применяется в случаях, когда необходимо найти значения, соответствующие основному условию, заданному в секции WHERE, и дополнительному условию, заключённому в подзапрос, являющийся аргументом предиката.

Для NOT EXISTS всё наоборот. Выражение

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

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .

Наиболее простые запросы с предикатом SQL EXISTS

В примерах работаем с базой данных библиотеки и ее таблицами "Книга в пользовании" (BOOKINUSE) и "Пользователь" (USER). Пока нам потребуется лишь таблица "Книга в пользовании" (BOOKINUSE).

Скрипт для создания базы данных библиотеки, её таблиц и заполения таблиц данными - в файле по этой ссылке .

AuthorTitlePubyearInv_NoCustomer_ID
ТолстойВойна и мир20052865
ЧеховВишневый сад20001731
ЧеховИзбранные рассказы201119120
ЧеховВишневый сад1991565
Ильф и ПетровДвенадцать стульев1985331
МаяковскийПоэмы19832120
ПастернакДоктор Живаго200669120
ТолстойВоскресенье20067747
ТолстойАнна Каренина19897205
ПушкинКапитанская дочка20042547
ГогольПьесы20078147
ЧеховИзбранные рассказы19874205
ПушкинСочинения, т.11984647
ПастернакИзбранное200013718
ПушкинСочинения, т.219848205
NULLНаука и жизнь 9 2018201912718
ЧеховРанние рассказы200117131

Пример 1. Определить ID пользователей, которым выданы книги Толстого, которым также выданы книги Чехова. Во внешнем запросе отбираются данные о пользователях, которым выданы книги Толстого, а предикат EXISTS задаёт дополнительное условие, которое проверяется в во внутреннем запросе - пользователи, которым выданы книги Чехова. Дополнительным условием во внутреннем запросе является совпадение идентификаторов пользователей из внешнего и внутреннего запросов: Customer_ID=tols_user.Customer_id. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse AS tols_user WHERE Author='Толстой' AND EXISTS ( SELECT Customer_ID FROM Bookinuse WHERE Author='Чехов' AND Customer_ID=tols_user.Customer_id)

Этот запрос вернёт следующий результат:

Customer_ID
65
205

Далее - пример использования NOT EXISTS в запросе, решающем похожую задачу.

Пример 2. Определить ID пользователей, которым выданы книги Чехова, и которым при этом не выданы книги Ильфа и Петрова. Конструкция запроса аналогична конструкции из предыдущего примера с той разницей, что дополнительное условие задаётся предикатом NOT EXISTS. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse AS cheh_user WHERE Author='Чехов' AND NOT EXISTS ( SELECT Customer_ID FROM Bookinuse WHERE Author='Ильф и Петров' AND Customer_ID=cheh_user.Customer_id)

Этот запрос вернёт следующий результат:

User_ID
120
65
205

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

Пример 3. Определить автора (авторов), книги которого выданы пользователю с ID 120, а также с ID 18.

Различия предикатов EXISTS и IN

При первом взгляде на запросы с предикатом EXISTS может возникнуть впечатление, что он идентичен предикату IN. Это не так. Хотя они очень похожи. Предикат IN ведет поиск значений из диапазона, заданного в его аргументе, и если такие значения есть, то выбираются все строки, соответствующие этому диапазону. Результат же действия предиката EXISTS представляет собой ответ "да" или "нет" на вопрос о том, есть ли вообще какие-либо значения, соответствующие указанным в аргументе. Кроме того, перед предикатом IN указывается имя столбца, по которому следует искать строки, соответствующие значениям в диапазоне. Разберём пример, показывающий отличие предиката EXISTS от предиката IN, и задачу, решаемую с помощью предиката IN.

Пример 4. Определить ID пользователей, которым выданы книги авторов, книги которых выданы пользователю с ID 31. Запрос будет следующим:

SELECT Customer_ID FROM Bookinuse WHERE Author IN ( SELECT Author FROM Bookinuse WHERE Customer_ID=31)

Результатом выполнения запроса будет следующая таблица:

User_ID
120
65
205

Внутренний запрос (после IN) выбирает авторов: Чехов; Ильф и Петров. Внешний запрос выбирает всех пользователей, которым выданы книги этих авторов. Видим, что, в отличие от предиката EXISTS, предикат IN предваряется именем столбца, в данном случае - Author.

Запросы с предикатом EXISTS и дополнительными условиями

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

Пример 5. Определить ID пользователей, которым выдана хотя бы одна книга Пастернака, и которым при этом выдано более 2 книг. Пишем следующий запрос, в котором первое условие задаётся предикатом EXISTS со вложенным запросом, а второе условие с оператором HAVING всегда должно следовать после вложенного запроса:

SELECT Customer_ID FROM Bookinuse AS pas_user WHERE EXISTS ( SELECT Customer_ID FROM Bookinuse WHERE Author='Пастернак' AND Customer_ID=pas_user.Customer_ID) GROUP BY Customer_ID HAVING COUNT (Title) > 2

Результат выполнения запроса:

Как видно из таблицы BOOKINUSE, книга Пастернака выдана также пользователю с ID 18, но ему выдана всего одна книга и он не попадает в выборку. Если применить к подобному запросу ещё раз функцию COUNT, но уже для подсчёта выбранных строк (потренируйтесь в этом самостоятельно), то можно получить сведения о том, сколько пользователей, читающих книги Пастернака, при этом читают также книги других авторов. Это уже из сферы анализа данных.

Запросы с предикатом EXISTS к двум таблицам

Запросы с предикатом EXISTS могут извлекать данные из более чем одной таблицы. Многие задачи можно с тем же результатом решить с помощью оператора JOIN, но в ряде случаев использование EXISTS позволяет составить менее громоздкий запрос. Использовать EXISTS предпочительнее в тех случаях, когда в результирующую таблицу попадут столбцы лишь из одной таблицы.

В следующем примере из той же базы данных помимо таблицы BOOKINUSE потребуется также таблица "Пользователь" (CUSTOMER).

Customer_IDSurname
18Зотов
31Перов
47Васин
65Тихонов
120Краснов
205Климов

Пример 6. Определить авторов, книги которых выданы пользователю по фамилии Краснов. Пишем следующий запрос, в котором предикатом EXISTS задано единственное условие:

SELECT DISTINCT Author FROM Bookinuse bk WHERE EXISTS ( SELECT * FROM Customer cs WHERE cs.Customer_ID=bk.Customer_ID AND Surname='Краснов')

Результатом выполнения запроса будет следующая таблица:

Author
Чехов
Маяковский
Пастернак

Как и в случае использования оператора JOIN, в случаях более одной таблицы следует использовать псевдонимы таблиц для проверки соответствия значений ключей, соединяющих таблицы. В нашем примере псевдонимы таблиц - bk и us, а ключ, соединяющий таблицы - User_ID.

Примеры запросов к базе данных "Библиотека" есть также в уроках по операторам GROUP BY, IN и функциям CONCAT, COALESCE.

Предикат EXISTS в соединениях более двух таблиц

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

Работаем с базой данных "Недвижимость". Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.

Таблица Deal содержит данные о сделках. Для наших заданий в этой таблице будет важен столбец Type с данными о типе сделки - продажа или аренда. Таблица Object содержит данные об объектах. В этой таблице нам понадобятся значения столбцов Rooms (число комнат) и LogBalc, содержащего данные о наличии лоджии или балкона в булевом формате: 1 (да) или 0 (нет). Таблицы Client, Manager и Owner содержат данные соответственно о клиентах, менеджерах фирмы и собственниках объектов недвижимости. В этих таблицах FName и LName соответственно имя и фамилия.


Пример 7. Определить клиентов, купивших или взявших в аренду объекты, у которых нет лоджии или балкона. Пишем следующий запрос, в котором предикатом EXISTS задано обращение к результату соединения двух таблиц:

SELECT cl.* FROM Client cl WHERE EXISTS ( SELECT 1 FROM Deal de JOIN Object ob ON ob.Obj_ID=de.Object_ID WHERE de.Client_ID=cl.Client_ID AND ob.LogBalc=0)

Так как из таблицы Client столбцы выбираются при помощи оператора "звёздочка", то будут выведены все столбцы этой таблицы, в которой будет столько строк, сколько насчитывается клиентов, соответствующих условию, заданному предикатом EXISTS. Из таблиц, к соединению которых обращается вложенный запрос, нам не требуется выводить ни одного столбца. Поэтому для экономии машинного времени извлекается лишь один столбец. Для этого после слова SELECT прописана единица. Этот же приём применён и в запросах в следующих примерах.

Написать запрос SQL с предикатом EXISTS самостоятельно, а затем посмотреть решение

Пример 3. Определить менеджеров, которые провели сделки с объектами с числом комнат больше 2.

Продолжаем писать вместе запросы SQL с предикатом EXISTS

Пример 9. Определить собственников объектов, которые были взяты в аренду. Пишем следующий запрос, в котором предикатом EXISTS также задано обращение к результату соединения двух таблиц:

SELECT ow.* FROM Owner ow WHERE EXISTS ( SELECT 1 FROM Object ob JOIN Deal de ON de.Object_ID=ob.Obj_ID WHERE ow.Owner_ID=ob.Owner_ID AND de.Type='rent')

Как и в предыдущем примере, из таблицы, к которой обращён внешний запрос, будут выведены все поля.

Пример 10. Определить число собственников, с объектами которых провёл менеджер Савельев. Пишем запрос, в котором внешний запрос обращается к соединению трёх таблиц, а предикатом EXISTS задано обращение лишь к одной таблице:

SELECT COUNT (*) FROM Object ob JOIN Deal de ON de.Object_ID=ob.Obj_ID JOIN Owner ow ON ob.Owner_ID=ow.Owner_ID WHERE EXISTS ( SELECT 1 FROM Manager ma WHERE de.Manager_ID=ma.Manager_ID AND ma.LName='Савельев')

Все запросы проверены на существующей базе данных. Успешного использования!

Примеры запросов к базе данных "Недвижимость" есть также в уроках по операторам GROUP BY и IN.

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

Datapine появился с видением, позволяющим менеджерам и лицам, принимающим решения, генерировать идеи и отчеты для эффективного управления своим бизнесом. Кроме того, отчеты KPI datapine включают в себя инструмент визуализации данных, который позволяет создавать представление данных таким образом, чтобы каждый пользователь мог их понять.

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

Преимущества

Цены

Datapine предлагает четыре различных типа тарифных планов, как показано ниже:

Преимущества:

  • Поддерживает несколько баз данных, таких как Oracle, SQLite, MS SQL, MySQL и т. Д.
  • Экспорт операторов SQL допускается в различные форматы, такие как таблицы, иерархические, текстовые и т. Д.
  • SQL Fiddle предлагает очень дружественные тарифные планы для своих пользователей.

Pricing

SQL Fiddle цены

Как вы можете видеть на картинке выше, проекты ZZZ просят вас внести свой вклад в их проект. ZZZ проектирует собственный SQL Fiddle и, поскольку они предоставляют вам бесплатный редактор исходного кода, они просят (не обязательно) внести вклад в их веб-сайт для поддержания и покрытия регулярных расходов.

Преимущества

  • SQL Intellisense и Autocomplete помогут вам повысить производительность.
  • Экономьте время, выполняя запросы SQL в фоновом режиме.
  • Узнайте, что такое совместная работа и совместное использование SQL с DBHawk.
  • Работайте с несколькими запросами и запускайте их одновременно с помощью редактора SQL.
  • Выполните свою работу, внедрив или запустив планы SQL.
  • Создавайте трехмерные диаграммы, рисунки и интерактивные дизайны, чтобы экспортировать их онлайн.

Цены

DBHawk предлагает два тарифных плана:

Преимущества

  • Это бесплатное программное обеспечение с открытым исходным кодом, которое работает на JVM.
  • Он предоставляет графики и диаграммы для установления взаимосвязи между таблицами.
  • SQuirreL SQL обеспечивает сравнение и совместное использование данных, поскольку поддерживает несколько сеансов.
  • Также доступны закладки и создание пользовательских кодов.

Цены

SQuirreL SQL не определяет тарифные планы, поскольку это бесплатный встроенный редактор с открытым исходным кодом.

Преимущества

  • Он имеет ярлык как Ctrl + пробел / Alt + пробел для автозаполнения.
  • Включает в себя функцию простого сохранения файла и передачи его другим пользователям очень быстро и безопасно.
  • Вставьте код на свой сайт и выполните его оттуда.
  • Имеется дополнительный интерактивный онлайн-калькулятор.

Цены: свяжитесь с ними напрямую для получения информации о ценах.

Преимущества

  • Сравните базы данных с простотой автоматизации.
  • Сравните и посмотрите различия в базе данных с широким спектром опций.
  • Усовершенствованный пользовательский интерфейс для получения точных результатов и четкого визуального представления различий.
  • Сравните вашу базу данных с выбранной или всеми доступными опциями.

Oracle Live SQL больше фокусируется на тестировании и обмене данными. Его недостатком является то, что другие базы данных не поддерживаются, пока вы не используете стандартный SQL. Инструмент предоставляет вам учебное пособие и полную документацию. Было бы хорошо использовать инструмент Oracle, поскольку он также предоставляет примеры данных для PHP и Java.

Преимущества

  • Предоставляет такие функции, как расширенная безопасность, аналитика и сжатие.
  • Он поддерживает Active Data Guards и Database Vault.
  • Кроме того, он также обеспечивает тестирование баз данных в режиме реального времени.
  • Дает понимание и генерирует отчеты с помощью пространственных и графических.
  • Безопасность меток и интерактивная аналитическая обработка также поддерживаются.

Цены: Практически все продукты Oracle можно бесплатно загрузить и использовать.

DBeaver поддерживает все распространенные типы баз данных, такие как MySQL, Oracle, DB2, SQLite, Sybase, Derby и многие другие.

Преимущества

  • Он поддерживает NoSQL и базу данных Big-Data.
  • Выберите нужный драйвер базы данных из множества вариантов.
  • Создайте свои собственные драйверы базы данных в соответствии с вашими потребностями.
  • Поддерживает несколько видов данных и расширенную систему безопасности.
  • Расширенные макеты данных и Visual Query Builder.

Цены

DBeaver в основном предлагает три типа тарифных планов на основе продолжительности, как в месяц / в год. План точно такой же, но разница заключается в сроке погашения плана.

Этот инструмент поставляется с Management Studio Express, которая является бесплатной версией Microsoft. SSMSE (SQL Server Management Studio Express) был впервые запущен с SQL 2005 с целью предоставления таких услуг, как администрирование, управление и конфигурирование данных.

Также обратите внимание, что этот инструмент не поддерживает такие службы, как службы интеграции, службы отчетов, службы анализа, уведомления и т. Д.

Преимущества

  • Самое приятное то, что он бесплатный и действительно очень прост в использовании.
  • Он предоставляет графический инструмент управления и редакторы сценариев.
  • Вы также можете очень легко экспортировать и импортировать SQL Server Studio.
  • Этот инструмент автоматически сохраняет файлы XML, созданные сервером.

Цены: Цены на этот инструмент абсолютно бесплатны.

Преимущества

  • Вы можете проверить и просмотреть операции crud для своего кода SQL.
  • Это поможет вам организовать и документировать код вашего SQL-сервера.
  • Сравнение кода может быть сделано, чтобы определить последствия изменений.
  • Легко понять сложное кодирование.
  • Расширенный поиск двигателя бар также доступна.

Цены: Нужно заполнить форму, чтобы получить расценки от Visual Expert.

Вывод

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

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

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

вчера я писал некоторые задания, и меня поразило, что я действительно не знаю правильный и принятый способ проверки, существует ли строка в таблице, когда я использую pl / sql.

для примера давайте используем таблицу

Очевидно, Что Я не могу (если нет какого-то секретного метода) что-то вроде:

таким образом, мой стандартный способ решения был:

однако я не знаю, принят ли это способ делая это, или если есть лучший способ проверить, я бы действительно apprieciate, если бы кто-то мог поделиться своей мудростью со мной :)

Я бы не стал вводить обычный код в блок исключений. Просто проверьте, существуют ли какие-либо строки, соответствующие вашему условию, и исходите оттуда:

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

один из способов сделать это было бы положить в какой-то синглтон выбрать, как в

но ИМО это относительно медленно и подвержено ошибкам. IMO лучший способ (tm) сделать это-включить его в основной курсор:

этот код рассчитывает на человека.ID объявляется в качестве первичного ключа на PERSON (или по крайней мере, как не NULL); логика заключается в том, что если таблица PERSON внешне присоединена к запросу, а PERSON_ID появляется как NULL, это означает, что строка не была найдена лично для данного CUSTOMER_ID, потому что PERSON.ID должен иметь значение (т. е., по крайней мере, не NULL).

поделиться и наслаждаться.

много способов, чтобы кожа Этот кот. Я помещаю простую функцию в пакет каждой таблицы.

делает ваши чеки очень чистые.

этот оператор дает 0, если нет строк, 1, Если у вас есть хотя бы одна строка в этой таблице. Это намного быстрее, чем выполнение select count(*). Оптимизатор "видит", что для ответа на вопрос необходимо получить только одну строку.

В том числе: Проверьте состояние экземпляра Oracle, проверьте процесс обслуживания Oracle, проверьте процесс мониторинга Oracle, всего три части.

1.1 Проверьте состояние экземпляра Oracle

Среди них «STATUS» указывает текущее состояние экземпляра Oracle, которое должно быть «OPEN», «DATABASE_STATUS» указывает текущее состояние базы данных Oracle, которое должно быть «ACTIVE».

1.2 Проверка состояния журнала онлайн Oracle

Выходной результат должен иметь более 3 записей (включая 3) записи, «STATUS» должен быть не «INVALID», не «DELETED». Примечание: «СТАТУС» пуст для обозначения нормального.

1.3 Проверьте состояние табличного пространства Oracle

СОСТОЯНИЕ должно быть ОНЛАЙН на выходе.

1.4 Проверьте состояние всех файлов данных Oracle

«STATUS» на выходе должно быть «ONLINE». или:

«STATUS» на выходе должно быть «ДОСТУПНО».

1.5 Проверка на недействительные объекты

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

1.6 Проверьте состояние всех сегментов отката

«СОСТОЯНИЕ» всех сегментов отката на выходе должно быть «ОНЛАЙН».

2. Проверьте использование ресурсов, связанных с Oracle

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

2.1 Проверьте значения соответствующих параметров в файле инициализации Oracle

Если LIMIT_VALU-MAX_UTILIZATION <= 5, это означает, что параметры инициализации Oracle, связанные с RESOURCE_NAME, должны быть скорректированы. Можно изменить, изменив файл параметров инициализации Oracle $ ORACLE_BASE / admin / CKDB / pfile / initORCL.ora.

2.2. Проверка соединения с базой данных

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

Среди них: SID сеанса (сеанса), идентификационный номер;

USERNAME - имя пользователя, с которого был установлен разговор;

Какой инструмент используется для сеанса PROGRAM для подключения к базе данных;

STATUS Текущее состояние этого сеанса. ACTIVE означает, что сеанс выполняет определенные задачи. INACTIVE означает, что текущий сеанс не выполняет никаких операций.

Если установлено слишком много подключений, это потребляет ресурсы базы данных. В то же время некоторые «зависшие» подключения, возможно, придется очистить вручную. Если администратор базы данных хочет отключить сеанс вручную, выполните:

(Обычно не рекомендуется использовать этот метод для разрыва соединения с базой данных, поэтому иногда сеанс не будет отключен. Легко вызвать прерывание соединения. Рекомендуется проверить spid операционной системы через sid и использовать ps –ef | grep spidno для подтверждения spid Не фоновый процесс ORACLE. Используйте команду kill -9 операционной системы, чтобы разорвать соединение)

Примечание. В приведенном выше примере сеансы с SID от 1 до 10 (столбец USERNAME пуст) являются фоновыми процессами Oracle и не выполняют никаких операций в этих сеансах.

2.3 Проверьте место на системном диске

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

Filesystem Size Used Avail Use% Mounted on

/dev/sda5 9.7G 3.9G 5.4G 42% /

/dev/sda1 479M 16M 438M 4% /boot

/dev/sda2 49G 19G 28G 41% /data

none 1014M 0 1014M 0% /dev/shm

2.4 Проверьте использование табличного пространства

select f.tablespace_name,
a.total,
f.free,
round((f.free / a.total) * 100) "% Free"
from (select tablespace_name, sum(bytes / (1024 * 1024)) total
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, round(sum(bytes / (1024 * 1024))) free
from dba_free_space
group by tablespace_name) f
WHERE a.tablespace_name = f.tablespace_name(+)
order by "% Free";

Если процент простоя% Free составляет менее 10% (включая 10%), обратите внимание на увеличение файла данных для расширения табличного пространства вместо использования функции автоматического расширения файла данных. Пожалуйста, не добавляйте слишком много файлов данных в табличное пространство.Принцип увеличения файлов данных заключается в том, что размер каждого файла данных составляет 2G или 4G, а максимальное ограничение для автоматического расширения составляет 8G.

2.5 Проверьте некоторые расширенные ненормальные объекты

Если запись возвращается, расширение этих объектов почти достигло максимального значения расширения, когда оно было определено. Для этих объектов необходимо изменить параметры его структуры хранения.

2.6 Проверка содержимого системного табличного пространства

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

2.7 Проверьте следующее расширение объекта и максимальное значение расширения табличного пространства

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

3. Проверьте результаты резервного копирования базы данных Oracle

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

Предположение: временный каталог для резервного копирования - / backup / hotbakup, нам нужно проверить результат резервного копирования 22 июля 2009 года, а затем использовать следующую команду для проверки:

cat /backup/hotbackup/hotbackup-09-7-22.log|grep –i error

Файл журнала сценария резервного копирования - hotbackup-month-date-year.log, находящийся во временном каталоге резервного копирования. Если в файле есть «ОШИБКА:», это означает, что резервное копирование не было успешным, и существует проблема, которую необходимо проверить.

3.2 Проверьте время создания файлов в томе резервной копии

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

3.3 Проверьте электронную почту пользователя оракула

4. Проверьте производительность базы данных Oracle

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

4.1. Проверка базы данных на события ожидания

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

4.2 Получить оператор SQL с самым высоким показанием диска

4.3. Найти десятку плохо работающих SQL

4.4 Пять систем с наибольшим временем ожидания ждут сбора событий

4.5 Проверка долгосрочного SQL

4.6. Проверьте процесс, который потребляет больше всего процессора

4.7 Проверьте таблицы с высокой фрагментацией

4.8 Проверьте соотношение ввода-вывода в табличном пространстве

4.9 Проверьте соотношение ввода / вывода файловой системы

4.10 Проверка на тупик и обработку

Запрос информации о текущем объекте блокировки:

Уровень Oracle убивает сессию:

Сеанс уничтожения на уровне операционной системы:

5. Проверьте базу данных процессора, ввода-вывода, производительность памяти

Запишите использование ЦП, ввода-вывода, памяти и т. Д. Базы данных, используйте команды vmstat, iostat, sar, top и другие для сбора информации и проверки информации для определения использования ресурса.

5.1 Использование процессора:

top - 10:29:35 up 73 days, 19:54, 1 user, load average: 0.37, 0.38, 0.29

Tasks: 353 total, 2 running, 351 sleeping, 0 stopped, 0 zombie

Cpu(s): 1.2% us, 0.1% sy, 0.0% ni,98.8% id, 0.0% wa, 0.0% hi, 0.0% si

Mem: 16404472k total, 12887428k used, 3517044k free, 60796k buffers

Swap: 8385920k total, 665576k used, 7720344k free, 10358384k cached


PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

30495 oracle 15 0 8329m 866m 861m R 10 5.4 7:53.90 oracle

32501 oracle 15 0 8328m 1.7g 1.7g S 2 10.6 1:58.38 oracle

32503 oracle 15 0 8329m 1.6g 1.6g S 2 10.2 2:06.62 oracle

Обратите внимание на синий шрифт выше, эта часть представляет оставшийся ЦП системы. Когда среднее значение падает ниже 10%, это рассматривается как ненормальное использование ЦП. Вам необходимо записать это значение и записать состояние как ненормальное.

5.2 Использование памяти:

total used free shared buffers cached

Mem: 2026 1958 67 0 76 1556

-/+ buffers/cache: 326 1700

Swap: 5992 92 5900

Как показано выше, синяя часть представляет общую память системы, красная часть представляет память, используемую системой, а желтая часть представляет оставшуюся память системы. Когда оставшаяся память составляет менее 10% от общей памяти, она считается ненормальной.

5.3 Ситуация с системным вводом / выводом:

Linux 2.6.9-22.ELsmp (AS14) 07/29/2009


avg-cpu: %user %nice %sys%iowait %idle

0.16 0.00 0.05 0.36 99.43


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 3.33 13.16 50.25 94483478 360665804


avg-cpu: %user %nice %sys%iowait %idle

0.00 0.00 0.00 0.00 100.00


Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn

sda 0.00 0.00 0.00 0 0

Как показано выше, синий шрифт указывает состояние чтения и записи диска, а красный шрифт указывает состояние ожидания ввода-вывода ЦП.

5.4 Системная нагрузка:

12:08:37 up 162 days, 23:33, 15 users, load average: 0.01, 0.15, 0.10

Как показано выше, синий шрифт обозначает нагрузку на систему. Если следующие три значения превышают 2,5, это указывает на то, что система работает при перегрузке. Запишите это значение в таблицу проверки и сочтите его ненормальным.

5.5 Проверьте, есть ли процесс зомби

Некоторые процессы зомби блокируют нормальную работу других сервисов и регулярно убивают процессы зомби.

5.6 Проверьте ссылку на линию / миграцию

Примечание. Обычно таблица с длинными необработанными столбцами имеет ссылку на строку, находит строку миграции и сохраняет ее в таблице chained_rows. Если такой таблицы нет, выполните ее.

Вы можете увидеть, какие строки являются перенесенными строками по таблице имя_хеда, head_rowid в таблице chained_rows

5.7 Регулярный статистический анализ
Для системы, использующей Oracle Cost-Based-Optimizer, необходимо регулярно собирать и обновлять статистическую информацию объектов данных, чтобы оптимизатор мог составить правильный план объяснения на основе подготовленной информации. Статистическая информация должна обновляться в следующих ситуациях:
а. Изменения в приложении
б. Масштабная миграция данных, миграция исторических данных, импорт других данных и т. д.
C. Количество данных изменилось
Проверьте, нужно ли обновлять статистику таблицы или индекса, например:

Если количество строк сильно отличается, таблица должна обновлять статистическую информацию, поэтому рекомендуется собирать статистическую информацию раз в неделю, например:

5.8 Проверьте частоту попаданий в буфер

Если частота попаданий ниже 90%, вам нужно увеличить параметр базы данных db_cache_size.

5.9 Проверка коэффициента попадания в общий пул

Если оно ниже 95%, вам необходимо настроить приложение для использования переменных связывания или настроить размер общего пула параметров базы данных.

5.10 Проверьте область сортировки

Если отношение диск / (памятка + строка) слишком велико, вам нужно настроить sort_area_size (workarea_size_policy = false) или pga_aggregate_target (workarea_size_policy = true).

5.11 Проверьте буфер журнала

Если повторное размещение буфера повторных попыток / повторных записей превышает 1%, вам нужно увеличить log_buffer.

6. Проверьте безопасность базы данных

В этом разделе мы в основном проверяем безопасность базы данных Oracle, в том числе: проверяем информацию о безопасности системы, регулярно меняем пароль, всего две части.

6.1 Проверьте информацию журнала безопасности системы

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

Проверьте журнал успешного входа в систему:

Jan 8 08:44:43 rac2 sshd[29559]: Accepted password for root from ::ffff:10.10.10.6 port 1119 ssh2……

Проверьте журнал неудачного входа в систему:

Jan 9 10:30:44 rac2 sshd[3071]: Invalid user ydbuser from ::ffff:192.168.3.5

Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2

Jan 9 10:30:56 rac2 sshd[3071]: Failed password for invalid user ydbuser from ::ffff:192.168.3.5 port 36005 ssh2

Jan 10 22:44:38 rac2 sshd[21611]: Failed password for root from ::ffff:10.10.10.6 port 1723 ssh2

6.2 Проверьте пользователя, чтобы сменить пароль

В системе баз данных часто бывает много пользователей, таких как: сторонние системы мониторинга баз данных, демонстрационные пользователи во время первоначальной установки базы данных, пользователи-администраторы и т. Д. Пароли этих пользователей часто пишутся, и многие люди знают, что они будут скрытыми мотивами. Люди привыкли атаковать систему и даже изменять данные. В число пользователей, которым необходимо изменить свои пароли, входят:
Пользователи администратора базы данных SYS, SYSTEM; другие пользователи.
После входа в систему введите cat / etc / passwd в командной строке, чтобы проверить, есть ли среди перечисленных пользователей неиспользуемые или странные учетные записи. Если он существует, он записывается как ненормальный.

Метод изменения пароля:

7. Другие проверки

В этом разделе мы в основном проверяем, является ли текущая задача crontab нормальной и не сработала ли работа Oracle. Существует шесть частей.

7.1 Проверьте, является ли текущая задача crontab нормальной

7.2 Сбой работы Oracle

Если есть проблемы, рекомендуется перестроить задание, например:

7.3. Контролировать рост объема данных

Согласно ежедневной проверке на этой неделе, найдите объекты базы данных с быстро расширяющимся пространством и примите соответствующие меры:

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

--- Расширить табличное пространство

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

Выполнить оператор SQL:

Таким образом, команда SQL для создания управляющего файла будет сгенерирована в каталоге USER_DUMP_DEST (указан в файле параметров инициализации).

7.4 Проверка на неуспешные индексы

Примечание. Обычно состояние индекса в таблице разделов равно N / A. Если индекс не выполнен, перестройте его, например:

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