Большинство полезных метазапросов SQL

У меня есть страсть к метазапросам, которыми я имею в виду запросы, которые отвечают на вопросы о данных вместо того, чтобы ответить данными.

Прежде чем я получу большую выровненную по ширине критику, я действительно понимаю, что подход метазапросов не идеален, как красноречиво описано здесь, например. Тем не менее, я полагаю, что у них действительно есть свое место. (Так так, чтобы я создал пользовательский элемент управления WinForms, который поддерживает параметризованные метазапросы для SQL Server, Oracle и MySql, и я описываю экстенсивно дизайн и использование этого QueryPicker в серии из трех частей, опубликованной на Simple-Talk.com.)

Моя мотивация для использования метазапросов:

  1. Когда я сажусь с новой базой данных и хочу понять это, я зондирую с метазапросами. Наиболее распространенный те, которые позволяют мне ответить на вопросы о полях и таблицах, такой как, "Что другие таблицы имеют это 'xyz' поле?" или, "Какие таблицы имеют столбцы идентификационных данных?" или, "Каковы ключи для этой таблицы?"
  2. Я регулярно работаю с несколькими типами БД (SQL Server, Oracle, MySql) и - осуществление большого идеала программирования лени - я не хочу должным быть искать или помнить тайный рецепт SQL каждый раз, когда мне нужен он. Я хочу навести и кликнуть.

Уверенный существуют другие (лучше?) способы получить метаинформацию - для данного типа БД. SQL Server, особенно, обеспечивает Studio управления SQL Server. Инструменты Oracle и MySql, кажется, не обеспечивают ту же полноценность. (Я свободно признаю, что предъявляю эту претензию со своим SQL-Server-leaning-view вселенной.:-) Даже если бы они сделали, то они были бы отличаться - я хочу единый подход через типы БД.


Так, наконец, вопрос:

Какой SQL Server, Oracle или метазапросы MySql Вы находите полезными?


Сводная матрица

Это первое представление суммирует мой набор к настоящему времени типом БД (и, как я сказал, в большой степени взвешенный к SQL Server).

Query                            SQL Server    Oracle     MySql

DB Version                           yes        yes        yes
Databases with properties            yes                   yes
Databases with space usage           yes
National Language Support                       yes
Procedures and functions             yes                   yes
Primary keys                         yes                   yes
Primary to foreign keys              yes
Session Information/brief            yes
Session Information/details          yes
Session SET options                  yes
Users and Roles                      yes
Currently running statements         yes
Constraints                          yes
Indexes                              yes
Column info/brief                    yes        yes        yes
Column info/details                  yes        yes        yes
Object level details                 yes
Rows and space used                  yes
Row/column counts                    yes
Non-empty tables                     yes        yes        yes
Show table schema                    yes        yes
Seed/max values                      yes

Ссылки типом БД

Я разработал некоторые из этих метазапросов сам, но многие произошли из общественных форумов. Это второе представление перечисляет исходные URL в соответствующих случаях.

SQL Server

System Category
-----------------
    DB Version
    Databases with properties    http://www.mssqltips.com/tip.asp?tip=1033
    Databases with space usage   http://www.sqlservercentral.com/Forums/Topic261080-5-1.aspx
    Procedures and functions
    Primary keys                 http://databases.aspfaq.com/schema-tutorials/schema-how-do-i-show-all-the-primary-keys-in-a-database.html
    Primary to foreign keys      http://www.sqlservercentral.com/scripts/Miscellaneous/61481/
    Session Information/brief    http://www.sqlservercentral.com/blogs/glennberry/archive/2009/12/28/how-to-get-a-count-of-sql-connections-by-ip-address.aspx
    Session Information/details  http://www.mssqltips.com/tip.asp?tip=1817
    Session SET options
    Users and Roles              http://www.sqlservercentral.com/scripts/users/69379/
    Currently running statements http://www.sqlservercentral.com/articles/DMV/64425/
    Constraints
    Indexes                      http://www.sqlservercentral.com/scripts/Index+Management/63932/

Column Category
-----------------
    Column info/brief
    Column info/details

Table Category
-----------------
    Object level details
    Rows and space used          http://www.mssqltips.com/tip.asp?tip=1177
    Row/column counts
    Non-empty tables

DDL Category
-----------------
    Show table schema            http://www.sqlservercentral.com/scripts/Create+DDL+sql+statements/65863/

Data Category
-----------------
    Seed/max values

Oracle

System Category
-----------------
    DB Version
    National Language Support

Column Category
-----------------
    Column info/brief
    Column info/details

Table Category
-----------------
    Non-empty tables

DDL Category
-----------------
    Show table schema

MySql

System Category
-----------------
    DB Version
    Databases
    Procedures and functions
    Primary keys                 http://databases.aspfaq.com/schema-tutorials/schema-how-do-i-show-all-the-primary-keys-in-a-database.html

Column Category
-----------------
    Column info/brief
    Column info/details

DDL Category
-----------------
    Show table schema

6
задан Michael Sorens 23 February 2010 в 21:05
поделиться

6 ответов

Oracle SQL Developer имеет набор встроенных отчетов, которые включают эти категории. Я расширил одну из категорий.

About Your Database
All Objects
Application Express
ASH and AWR
Database Administration
  All Tables
  Cursors
  Database Parameters
  Locks
  Memory
  Sessions
  Storage
  Top SQL
  Users
  Waits and Events
Data Dictionary
Jobs
PLSQL
Security
Streams
Table
XML

Это некоторые из фактических названий отчетов,

Tables without Indexes
Tables without Primary Keys
Tables with Unindexed Foreign Keys
Largest Average Row Length
Most Rows
Unusable Indexes

Доступно гораздо больше отчетов.

1
ответ дан 17 December 2019 в 20:31
поделиться

В Oracle наиболее полезным является сообщение на v $ session об ожиданиях в запущенных сеансах, то есть о том, какие сеанс, выполняемый в этот момент (чтение с диска, ожидание блокировки, ...)

0
ответ дан 17 December 2019 в 20:31
поделиться

У меня есть ряд из них, которые я регулярно использую на SQL Server, включая, помимо прочего:

  • Таблицы без первичных ключей
  • Таблицы без кластерного индекса
  • Таблицы без индексов
  • Скалярные функции, определяемые пользователем, которые не являются детерминированными
  • Объект базы данных, у которого нет расширенного свойства «MS_Description» (свойство «Описание» по умолчанию, которое полезно для создания документации)
  • Схемы которые являются пустыми
  • SQL-модулями (представления, процессы, функции, триггеры) без стандартных блоков документации / комментариев

Специфичные для системы:

  • Таблицы конфигурации, содержащие ссылки на отсутствующие хранимые процедуры или представления
  • Представления на основе таблицы / представления, которые не могут быть привязаны к схеме или проверены (поскольку они основаны на представлении / таблице в другой базе данных)
  • Столбцы в представлениях, которые не используются в системе
  • Определенные типы столбцов с допуском NULL, которые не имеют значений по умолчанию
  • ] Числовые столбцы, допускающие значение NULL
1
ответ дан 17 December 2019 в 20:31
поделиться

Oracle имеет большой диапазон представлений метаданных, вероятно, наиболее часто я запрашиваю DBA_OBJECTS, в котором можно запрашивать все виды различных типов объектов. Эту же информацию и многое другое можно получить из других представлений (например, дополнительную информацию о таблицах можно найти в DBA_TABLES).

Хороший обзор словаря данных Oracle можно найти здесь .

0
ответ дан 17 December 2019 в 20:31
поделиться

Проблема с использованием набора стандартных сценариев из Интернета заключается в том, что «это не то, что вы знаете, это то, что вы знаете, это не так, или уже не так ". При подъеме скриптов нужно убедиться, что у них правильная версия. Например, Oracle с 10.1 или 10.2 позволяет установить столбец как НЕИСПОЛЬЗУЕМЫЙ. Он по-прежнему отображается в DBA_TAB_COLUMNS, но его там больше нет.

Лучше понимать, что находится в Словаре данных - в частности, в Oracle, это содержимое справочника по базе данных (V $, DBA_ *) и справочник по пакетам и типам PL / SQL, поскольку все больше и больше функциональных возможностей движется в этом направлении. (например, пакет DBMS_STATS заменяет оператор ANALYZE)

Некоторые из наиболее эзотерических, но полезных в Oracle:

DICT - имя и краткое описание каждой таблицы \ представления в словаре данных.

DBA_TAB_MODIFICATIONS - в каких таблицах был трафик вставки / обновления / удаления с момента последнего анализа.

V $ OBJECT_USAGE - при использовании с ALTER INDEX ... MONITORING USAGE показывает, какие индексы не использовались в операторах SQL с момента включения мониторинга. (Индексы, используемые для поддержки внешнего ключа или ограничений уникальности, могут не отображаться, но тем не менее, возможно, были «использованы».)

V $ SESSION_LONGOPS - какие операторы SQL выполняют «длительные» операции, такие как полное сканирование, сортировка и слияние, и сколько времени, по мнению Oracle, пройдет до завершения.

DBA_HISTOGRAMS - Какой перекос в ваших данных

DBA_OBJECTS - есть все

DBA_SOURCE (по строкам) / DBA_TRIGGERS (по блокам) - все исполняемые файлы код в системе.

0
ответ дан 17 December 2019 в 20:31
поделиться

msorens,

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

Возможно, вам понравится мой другой пост по адресу:
Сравните две схемы и обновите старую схему с новыми столбцами новой схемы

Мой сценарий сравнения схем - кладезь информации о представлениях каталога Oracle. К сожалению, он не завершен, но это задача на другой день. ; -)

Мэтью

0
ответ дан 17 December 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: