У меня есть страсть к метазапросам, которыми я имею в виду запросы, которые отвечают на вопросы о данных вместо того, чтобы ответить данными.
Прежде чем я получу большую выровненную по ширине критику, я действительно понимаю, что подход метазапросов не идеален, как красноречиво описано здесь, например. Тем не менее, я полагаю, что у них действительно есть свое место. (Так так, чтобы я создал пользовательский элемент управления WinForms, который поддерживает параметризованные метазапросы для SQL Server, Oracle и MySql, и я описываю экстенсивно дизайн и использование этого QueryPicker в серии из трех частей, опубликованной на Simple-Talk.com.)
Моя мотивация для использования метазапросов:
Уверенный существуют другие (лучше?) способы получить метаинформацию - для данного типа БД. 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 в соответствующих случаях.
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
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
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
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
Доступно гораздо больше отчетов.
В Oracle наиболее полезным является сообщение на v $ session
об ожиданиях в запущенных сеансах, то есть о том, какие сеанс, выполняемый в этот момент (чтение с диска, ожидание блокировки, ...)
У меня есть ряд из них, которые я регулярно использую на SQL Server, включая, помимо прочего:
Специфичные для системы:
Oracle имеет большой диапазон представлений метаданных, вероятно, наиболее часто я запрашиваю DBA_OBJECTS, в котором можно запрашивать все виды различных типов объектов. Эту же информацию и многое другое можно получить из других представлений (например, дополнительную информацию о таблицах можно найти в DBA_TABLES).
Хороший обзор словаря данных Oracle можно найти здесь .
Проблема с использованием набора стандартных сценариев из Интернета заключается в том, что «это не то, что вы знаете, это то, что вы знаете, это не так, или уже не так ". При подъеме скриптов нужно убедиться, что у них правильная версия. Например, 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 (по блокам) -
все исполняемые файлы код в системе.
msorens,
Я полностью с вами согласен. Понимание данных и схемы поможет вам лучше кодировать, лучше избегать ошибок, выявлять особые случаи и анализировать требования.
Возможно, вам понравится мой другой пост по адресу:
Сравните две схемы и обновите старую схему с новыми столбцами новой схемы
Мой сценарий сравнения схем - кладезь информации о представлениях каталога Oracle. К сожалению, он не завершен, но это задача на другой день. ; -)
Мэтью