Календарь на Июнь 2024 года: calendar2008.ru/2024/iyun/
Навигация
Главная »  Sql 

4 5 [ 6 ] 7

  Безопасен ли SQL Server?
Источник: habrahabr Я использую SQL Server с тех самых пор, как выучил, каким образом работают базы данных. Перенос БД Access в MS SQL стал моим первым большим проектом в EnGraph. За эти годы я выучил не так много и был застигнут врасплох вопросом клиента - безопасен SQL Server или же нет. Конкретно же клиенты интересовались нашим продуктом ParaPlan Cloud, который мы разместили, воспользовавшись Amazon EC2, и были обеспокоены открытием порта 1433.  Частично я был застигнут врасплох, поскольку мой мыслительный процесс был примерно таким: "Конечно, SQL Server безопасен! Как глупо об этом спрашивать!" Но проработав с SQL Server более десятка лет, я не смог удовлетворительно ответить на их вопрос. Мы построили целую компанию на использовании этого продукта и поэтому, возможно, должны понимать, как работает его безопасность. Поэтому я ответил им, что проделаю дополнительные исследования и вернусь с результатами.

  System Administration Toolkit: Перемещение файловой системы в UNIX
Источник: IBM developerWorks РоссияМартин Браун Перемещение каталога или файловой системы в UNIX Существует много ситуаций, когда может понадобиться переместить файловую систему в UNIX с одного физического устройства (логического раздела жесткого диска) на другое, к примеру, если перемещаются некоторые данные с текущей файловой системы в новый логический раздел, чтобы освободить на текущей файловой системе место, и попутно на новом разделе для этих данных создается и монтируется файловая система. Такую операцию можно провести как на однопользовательской системе, так и на работающей многопользовательской, где надо гарантировать, что в процессе перемещения данные не потеряют доступность. В последнем случае (перемещение работающей файловой системы), может понадобиться перемещать приложение в то время, когда оно работает. В любом случае нужно переместить каталоги с системными файлами системы, такие как /usr или /var, и независимо от того, работает компьютер в однопользовательском режиме или нет, эти файлы системы могут активно использоваться. При любой операции перемещения файловой системы необходимо убедиться, что данные были корректно скопированы в новое место. В листинге 1 1 показано разбиение жесткого диска на разделы и размещение файловой системы. Листинг 1.

  JDataStore 7 (download)
Borland JDataStore 7 - это высокопроизводительная межплатформенная база данных. Она сочетает в себе мощность, масштабируемость и надежность, необходимые для создания особо важных бизнес-приложений, а ее размер, равный всего 1 MB, делает возможным использование JDataStore в приложениях для мобильных устройств. Легкая в использовании и развертывании, практически не требующая администрирования - что значительно уменьшает объем капиталовложений - эта база данных будет прекрасным выбором для независимых поставщиков ПО (ISV), активных посредников (VAR), изготовителей комплектного оборудования (OEM) и корпоративных IT-групп, разрабатывающих приложения баз данных, не требующие IT-поддержки и администрирования. Устойчивость к отказам. В JdataStore включено "зеркалирование" (failover mirroring), обычно входящее в корпоративные базы данных. Консоль управления (Server Management Console). JDataStore 7 содержит новую графическую консоль управления, помогающую повысить производительность разработчиков Отображения (Views), схемы и защита.

  К каждой строке охранника приставишь!
Владимир Пржиялковский Одним рассказ казался длинен,другие утверждали, что он слишком краток,большинство же, как всегда,скромно молчало...М. Горький. Публика Одни утверждали, что он [дом]трехэтажный, другие - что четырех.А. и Б. Стругацкие. Град обреченный Оглавление Аннотация Введение Простой пример Данные для регламентируемого доступа Политика безопасности Заводим метки доступа Приписываем метки доступа пользователям Приписываем метки доступа строкам Проверяем, как работает Более сложная логика Более сложная структура метки доступа Метки сеанса Другие усложнения Замечания по технологии Дополнительная информация Аннотация В статье Каждому (пользователю) свое (данное в таблице). Часть 2 говорилось о том, что в СУБД Oracle имеется механизм virtual private database, позволяющий по-разному ограничивать разными пользователям доступ к частям одной и той же таблицы.

  Восстановление базы MySQL из бинарных логов (исходники)
Источник: habrahabrApostol Базы данных иногда пропадают. Человеческий фактор и всё-такое… Если вы не делали бекапов (а надо бы) или они уже устарели, не отчаивайтесь, - есть ещё возможность восстановить утерянную информацию. Начиная с версии 4.1.3 MySQL записывает все запросы, которые приводят к изменению данных, в бинарный журнал обновлений (binary log). Но эта опция может оказаться и отключенной по умолчанию. На моей домашней машине, например, бинарные логи не велись после установки. Включил раскомментировав строку log_bin = /var/log/mysql/mysql-bin.log в конфигурационном файле (my.cnf). На сервере же велись изначально.

  Политика Sybase по поддержке версий ПО
Жизненный цикл Продуктов Sybase Данный документ кратко описывает существующий жизненный цикл программного обеспечения Sybase от момента разработки программы до ее снятия с технической поддержки. Создание программного обеспечения начинается с цикла внутренней разработки ПО, когда клиентам иногда предоставляется в ограниченном варианте доступ к бета-версиям системы. После отладки и принятия решения о готовности версии ПО к промышленной эксплуатации, выпускаемая версия получает статус GA (General Available). Дата выпуска GA является датой официального выпуска версии продукта и ее доступности для оформления контрактов. Вскоре после этого ПО получает статус Shippable , что означает доступность программного продукта для поставки конечному пользователю. По мере выхода новых версий продукта и потери актуальности, данная версия ПО получает статус End of Sale , что означает прекращение продажи и поставки клиентам. При этом клиентам осуществляется полноценная техническая поддержка продукта, пока он не получает статус EOL (End of Life) .

  Моделирование и проектирование баз данных в информационных системах. Часть 4
Источник: ca.comДжош Джонс (Josh Jones) и Эрик Джонсон (Eric Johnson) В этом техническом описании мы расскажем, что такое моделированием данных, почему оно имеет такое значение, и какие концепции и методы лежат в основе моделирования данных.  ТРЕТЬЯ НОРМАЛЬНАЯ ФОРМА (3НФ) Третья нормальная форма - это нормальная форма, в которой большинство моделей данных и баз данных уже являются нормализованными. Третья нормальная форма требует, чтобы модель  данных соответствовала форме 2НФ, и добавляет требование отсутствия транзитивных зависимостей. Транзитивная зависимость имеет место в том случае, если неключевой атрибут некоторой сущности зависит от другого неключевого атрибута, который, в свою очередь, зависит от первичного ключа в этой же сущности. То есть, если существует атрибут, который зависит от другого атрибута, не являющегося часть первичного ключа, то этот атрибут имеет транзитивную зависимость. Как и для первой и второй нормальной форм, обычный метод разрешения проблемы - это создание новой сущности, содержащей неправильные атрибуты. В примере с исполнителями, записывающими альбомы, создание новой сущности для информации о складе позволит нам перенести всю специфическую для склада информацию в эту новую сущность. Однако у нас все еще есть информация о поставщике.

  Как обязать СУБД применять к запросам конкретные приемлемые планы
© Владимир Пржиялковский А мои ти куряни - сведоми къмети: подъ трубами повити, подъ шеломы възлелеяны, конець копия въскръмлени; пути имь ведоми, яругы имь знаеми, луци у нихъ напряжени, тули отворени, сабли изъстрени; сами скачють, акы серыи влъци въ поле, ищучи себе чти, а князю славе. Слово о полку Игореве Реферат Рассматривается система управления планами (SPM), введенная в версии Oracle 11 применительно к повторяющимся запросам приложения.  Она позволяет формировать и хранить для запросов допустимые наборы планов (baselines), заставить СУБД работать только по ним и тем самым избежать в отдельных случаях непредусмотренного падения производительности при обработке. Введение Как известно, СУБД, получив от приложения запрос, сначала строит программу вычисления ответа ("план"), и тут же эту программу отрабатывает.  Теоретически план можно построить наилучшим образом: получить множество всех возможных для данного запроса планов и выбрать из них наиболее поизводительный в нужном отношении.  На практике же любая промышленная СУБД, включая Oracle, вырабатывает план на скорую руку, достигая при этом приемлемого времени ответа, но зато жертвуя точностью решения задачи.  Как следствие применяемые к поступающим запросам планы нередко оказываются не самыми лучшими, и общая производительность СУБД страдает.  Для решения этой проблемы фирма Oracle, равно как и прочие разработчики, дает пользователю средства вмешиваться в выработку плана СУБД.  Косвенное вмешательство достигается воздействием на факторы, влияющие на выработку оптимизатором планов:   параметры СУБД и сеанса, показатели статистики объектов запроса, употребление подсказок.  Прямое вмешательство состоит в диктовке СУБД, какие именно планы следует использовать для конкретных запросов. Исторически первым инструментом последней категории стали "очертания" (outline) запросов, появившиеся в версии 8.1.   "Очертание" запроса - это план, "схваченный" в подходящий момент времени и сохраненный для последующего употребления.  Пользователь получает возможность в пределах конкретных сеансов  "включать" "очертание", заставляя СУБД пользоваться этим конкретным планом независимо от текущих обстоятельств.  Последней версией, где эта техника фиксации плана поддерживается, официально считается Oracle 11. Вторым по времени инструментом стал "профиль" (profile) запроса, введенный в версии 10.  Профили могут возникнуть в результате специальной процедуры анализа СУБД запроса, представляющего интерес, в рамках работы советника SQL Tuning Advisor.  Пользователь имеет право в любой момент включить имеющийся профиль, и тогда текущий план запроса подкорректируется в сторону улучшения.  Влиянием на применяемый СУБД план будет включение и отключение профиля по мере необходимости. В версии 11 в Oracle появилось третье по счету средство указания СУБД, каким опрпделенным планом ей воспользоваться при обработке того или иного запроса.  Оно получило название "управления планами": SQL plan management (SPM).  Его основное назначение - не дать возможность пустить обработку повторяющихся запросов приложения по "плохому" плану.  "Плохим" же план может оказаться ненароком при смене обстоятельств очередного поступления запроса - значений переменных привязки, статистики объектов, переменных СУБД или сеанса и даже версии СУБД или ОС. Система управления планами запросов SPM позволяет формировать "базу управления запросами" (SQL management base, SMB).  Она располагается в AWR (automatic workload repository) .

  Будет ли повышаться зарплата ИТ-специалистов в будущем?
Источник: Redmond Media GroupMichael Domingo   Как показал опрос, проведенный журналом Redmond в 2006 году в США, зарплата ИТ-профессионалов возросла на 3,3% с 2005 года (что, впрочем, гораздо меньше, по сравнению с предыдущим годом, где увеличение составило 12%). Но в целом, опрос показал положительный результат: средний базовый оклад удерживается на одном уровне, достигнув суммы $70901. Этот показатель даже лучше средней зарплаты всех ИТ-специалистов по США, чей средний базовый оклад составил $63210 по данным Министерства Труда США за июнь. "Нет того прироста, который наблюдался с 2004 по 2005 год по опросу сертифицированных специалистов MCP, но, тем не менее, статус MCP является важным преимуществом для тех, кто хочет получать зарплату, соответствующую их компетентности", сказал редактор MCPmag.com Майкл Доминго (Michael Domingo), который принимал участие в составлении отчета за этот год. Самая маленькая зарплата для сертифицированных специалистов с любым статусом MCP составила $69431, что больше по сравнению с 2005 годом на $3594. Опрос также показал возросшую удовлетворенность работой специалистов со статусами MCP по сравнению с прошлым годом, что является хорошей новостью для опытных ИТ-специалистов. Средняя оценка удовлетворенности работой составила 4,25, тогда как в прошлом году она составляла 4,09 (тех, кто участвовал в опросе, просили оценить удовлетворенность работой, по таким критериям как компенсационные пакеты, бонусы, обязанности и дополнительные заработки, они должны были проставить оценки от 1 до 5, где оценка 5 означала «Очень доволен») Результаты опроса 2006 года резко контрастируют с неубедительными показателями двухгодичной давности, где зарплата увеличивалась очень вяло, и ее прирост составлял всего 0,3%, что связывалось с внешними проблемами и состоянием экономики, которое только начинало возвращаться к нормальному.

  Том Кайт: о разделении, расщеплении и удалении (On Sharing, Splitting, and Deleting, By Tom Kyte)
Источник: realcoding Том Кайт рассматривает совместное использование курсоров, расщепление больших таблиц и надежное удаление строк. Вопрос. Я немного озадачен вашей фразой: "Если вы будете использовать параметр CURSOR_SHARING=SIMILAR, вы можете уменьшить количество сгенерированных планов выполнения, а, с другой стороны, вы можете иметь точно такое же количество планов". Что влияет на количество сгенерированных планов? Я думал, что если в параметре CURSOR_SHARING установить значение SIMILAR, то оптимизатор заменит все литералы на переменные связывания:SYS_B _? - это то, что мы видим в нашем сервере базы данных. Ответ. Параметр CURSOR_SHARING используется в сервере Oracle Database для управления "автоматическим связыванием" в SQL-операторах. Сервер может в запросе SELECT * FROM TABLE WHERE COL = 'литерал' заменить 'литерал' на переменную связывания, и предикат будет выглядеть так: WHERE COL = :"SYS_B_0".

  Блокировки Oracle при неиндексированных внешних ключах
Источник: foxbase В данной статье речь пойдет о блокировках при использовании неиндексированных внешних ключей. Тема известная для разработчиков, однако, на мой взгляд, существует несколько подводных камней, на которые часто не обращают внимание многие разработчики, вследствие чего могут возникать очень серьезные проблемы в многопользовательской среде. При проектировании схемы базы данных и разработке таблиц существует очень важное правило: внешние ключи в таблицах без индекса не имеют права на существование. Иначе мы получаем полную блокировку подчиненной таблицы при выполнении изменения первичного ключа или при удалении записи из главной таблицы. Однако, что означает полная блокировка подчиненной таблицы? Как она проявляется? При детальном исследовании можно выяснить много интересного. Попробуем продемонстрировать паразитные эффекты неиндексированных внешних ключей на примере. Приведенный ниже пример был создан и протестирован для версии Oracle 10g R2.

  Наболевшее об исходном коде объектов БД
Источник: habrahabrdocument.write('.');ru/post/142255/Грамин Максим Представьте такую ситуацию: команда разработчиков работает над программой. При этом исходный код приложения нигде не хранится. Каждый программист с помощью специального декомпилятора выгружает нужный код из бинарника, работает с ним, а потом вновь собирает и отдает на дальнейшую разаработку коллегам. Как вы думаете, это нормальная ситуация? Думаю, что нет.  Но почему-то такой подход довольно часто применяется при разработке приложений БД.  Объекты создаются и изменяются "наживую" прямо в БД. Большинство специализированных IDE предоставляют массу "удобных" инструментов для этого - поиск нужного объекта с помощью навигационного дерева, его модификация несколькими щелчками мыши и т.д. При этом об исходном коде мало кто задумывается - а при сборке версии часто используются утилиты, которые на основании кода текущей базы и кода базы продакшена генерируют диф-скрипт (для меня до сих остается загадкой как, т.к.

  Поиск курса валюты. SQL-запрос в Oracle.
Источник: foxbase Необходимо написать SQL запрос, который выводит значение курса валюты на заданную дату. Такой вопрос может быть задан на собеседовании при приеме на работу в качестве разработчика баз данных. Вопрос не столь прост, как может показаться. Постановка задачи: Имеется таблица изменений курса валют T_CURRENCY: CODE varchar2(32) Код валюты (USD, RUR, …) DATE_C date Дата изменения курса VALUE number Значение курса Данные заносятся в эту таблицу каждый раз, когда изменяется значение курса какой либо валюты. Напишите SQL запрос, с помощью которого можно получить значение курса для заданной валюты на заданную дату. Решение: При решении этой задачи необходимо сообразить, что курсы валют изменяются не каждый день. Например, в выходные изменений нет, а запросить значение интересующей нас валюты мы можем на любую дату, в том числе и на любой выходной.

  Объекты в Oracle - это очень просто
Владимир Пржиялковский Оглавление Введение Хранимые объекты Простой пример Создание таблицы объектов Ссылки на объект Методы объектов Виртуальные объекты Введение В версии 8 в Oracle появилась возможность хранения неатомарных (нескалярных) значений в поле таблицы, а именно объекта в смысле объектного подхода (в рамках так называемой "объектно-реляционной модели" Oracle). Некоторые существенные пробелы этой первой реализации были устранены в версии 9. Примеры ниже используют возможности версии 9.2. Сразу надо предостеречь от преувеличений достоинств объектного подхода в базах данных вообще. Действительно, неискушенный читатель некоторых руководств или рекламных материалов быстро впадет в недоумение: зачем же такие маститые разработчики СУБД, как фирмы IBM, Informix или Oracle так долго занимались табличной организацией данных, когда все это время рядом существовала более совершенная, удобная и т. д. объектная, первая реализация которой фирмой Xerox известна с 1980 года? Непредвзятый ответ состоит в том, что ни табличная организация (часто вольно называемая "реляционной" применительно к конкретным СУБД), ни объектная не являются универсально "хорошими", и что имеются свои достоинства и недостатки у одной и у другой.

  Моделирование групп объектов в Oracle
Владимир Пржиялковский Оглавление Введение Таблицы хранимых и синтезированных объектов Коллекции Вложенные таблицы Работа в PL/SQL Массивы типа VARRAY Преобразования коллекций Объектный подход к моделированию БД, безусловно, имеет свою притягательность, хотя, как замечалось в предыдущей статье ценность его преувеличивать не стоит, так как и он не лишен собственных проблем и ограничений (к слову сказать, известных задолго до середины 90-х годов, когда ведущие поставщики СУБД взяли его на вооружение). Однако подход есть, и как-то решать задачу моделирования он обязан. В предыдущей статье говорилось о том, как в Oracle можно создавать и хранить отдельные объекты. В жизни этого недостаточно, и требуется иметь возможность моделировать группы объектов: наборы адресов, списки сотрудников и т. д. Такая возможность предусматривалась, например, в сетевой модели данных, исторически предшествовавшей реляционной, и проектировалась в виде расширения реляционной создателем последней Э. Коддом (в силу ряда причин это расширение было проигнорировано разработчиками промышленных "реляционных" СУБД).

  Аналитические функции в Oracle (Часть 1)
Источник: akarak Общие положения Общая информация Цели введения аналитических функций в Oracle Классификация видов аналитических функций в Oracle Основные технические особенности Место указания аналитических функций в SQL-предложении Сравнение с обычными функциями агрегирования Особенности обработки Разбиение данных на группы для вычислений Упорядочение в границах отдельной группы Выполнение вычислений для строк в группе по плавающему окну (интервалу) Формирование интервалов агрегирования "по строкам" и "по значениям" Функции FIRST_VALUE и LAST_VALUE для интервалов агрегирования Интервалы . Их описания были созданы совместными усилиями фирм IBM, Informix, Oracle и Compaq путем разработки так называемых "улучшений" некоторых конструкций, имеющихся в стандарте SQL1999. В отличие от обычных скалярных функций аналитические функции берут аргументом SQL-таблицу, представляющую логический промежуточный результат обработки SQL-оператора, где использовано обращение к такой функции, и возвращают в качестве своего результата обычно тоже SQL-таблицу. Цели введения аналитических функций в Oracle Техническая цель введения аналитических функций - дать лаконичную формулировку и увеличить скорость выполнения "аналитических запросов" к БД, то есть запросов, имеющих смыслом выявление внутренних соотношений и зависимостей в данных. Более точно, пользование аналитическими функциями может дать следующие выгоды перед обычными SQL-операторами: Лаконичную и простую формулировку. Многие аналитические запросы к БД традиционными средствами сложно формулируются, а потому с трудом осмысливаются и плохо отлаживаются. Снижение нагрузки на сеть.

  Аналитические функции в Oracle (Часть 2)
Источник: akarak Место указания аналитических функций в SQL-предложении Аналитические функции принимают в качестве аргумента столбец промежуточного результата вычисления SQL-предложения и возвращают тоже столбец. Поэтому местом их использования в SQL-предложении могут быть только фразы ORDER BY и SELECT, выполняющие завершающую обработку логического промежуточного результата. Сравнение с обычными функциями агрегирования Многие аналитические функции действуют подобно обычным скалярным функциям агрегирования SUM, MAX и прочим, примененным к группам строк, сформированным с помощью GROUP BY. Однако обычные функции агрегирования уменьшают степень детализации, а аналитические функции нет. Поясняющий сравнительный пример: SELECT deptno, job, SUM(sal) sum_salFROM empGROUP BY deptno, job; SELECT ename, deptno, job,             SUM(sal) OVER (PARTITION BY deptno, job) sum_sal    FROM emp; Результат первого запроса: DEPTNO             JOB                       SUM_SAL----------                  ---------                         ---------- 10 CLERK 1300  .

  Процедура RAISE_APPLICATION_ERROR
Источник: akarak Процедура RAISE_APPLICATION_ERROR позволяет посылать собственные пользовательские сообщения об исключениях из хранимых программ. Эта процедура возвращает пользователю информацию об исключении тем же способом, которым пользуется сервер Oraсle для возвращения информации для прочих исключений.   declare  i integer; begin  i :=1 /0; exception  when others then     raise_application_error (-20000,'Деление на ноль.'); end;   или еще варианты   ... exception ...  when no_data_found then    raise_application_error (-20000,'ненайденно данных');  when others then    raise_application_error (-20200,'другие ошибки'); end;   Ниже приведена выдержка из книги "ORACLE PL/SQL для профессионалов"   Использование процедуры RAISE_APPLICATION_ERROR Вот заголовок процедуры RAISE_APPLICATION_ERROR: PROCEDURE RAISE_APPLICATION_ERROR ( num binary_integer, msg varchar2, keeperrorstack boolean default FALSE): Здесь num - это номер ошибки из диапазона от -20 999 до -20 000 (вы только подумайте: все остальные отрицательные числа, которые больше -20 000, Oracle использует для собственных исключений!); msg - это сообщение об ошибке, длина которого не должна превышать 2048 символов (символы, выходящие за эту границу, игнорируются); аргумент keeperrorstack указывает, хотите вы добавить ошибку к тем, что уже имеются в стеке (TRUE), или заменить существующую ошибку (значение по умолчанию - FALSE). ПРИМЕЧАНИЕ -------------------------------------------------- Предполагается, что Oracle для обозначения пользовательских ошибок выделила диапазон номеров от -20 999 до -20 000, но учтите, что в нескольких встроенных пакетах, в том числе в DBMS_OUTPUT и DBMS_DESCRIBE, номера от-20 005 до -20 000 по-прежнему присваиваются системным ошибкам. Не очень удобно, конечно, но дело обстоит именно так.

  Защита на уровне строк - Часть 2: Правила защиты
Источник: ln Джонатан Льюис (Jonathan Lewis)www.jlcomp.demon.co.uk В предыдущей статье этой мини-серии я продемонстрировал пару простых методов обеспечения изоляции данных различных пользователей или групп пользователей. В этой статье я перехожу к "правильной" защите на уровне строк (RLS), также известной как средства детального контроля доступа (fine-grained access control - FGAC) или средства создания виртуальной приватной базы данных (virtual private database - VPD). Примеры в этих статьях были протестированы с помощью Oracle 9.2.0.3. Требования В исходном примере изоляции данных в первой статье была использована таблица со столбцом owner, на основе которой было построено статическое представление, выдающее результирующее множество, зависящее от обращающегося пользователя. Определение этого представления было очень простым и требовало одного условия на этот единственный столбец, а в качестве дополнительного кода потребовался только триггер уровня таблицы. Но что делать при наличии множества различных требований разделения данных, и одного простого условия недостаточно? Рассмотрим (несколько запутанный) пример системы, используемой сетью супермаркетов для поддержки хранилища данных. Ключевая таблица, показывающая ежедневный уровень запасов товаров, имеет следующее определение:create table stock_level ( stock_date date, product_id number(6), qty number(8), dept_id varchar2(20), supplier_code varchar2(20)); Таблица показывает уровень запасов по датам и товарам.

  Выводимые таблицы с хранимым результатом. Часть 1
Владимир Пржиялковский Содержание Введение Общие положения Некоторые основные свойства Справочная информация Подготовка примера Некоторые типичные примеры Построение в рамках распределенной БД: тиражирование данных Подготовка примера Построение примера Построение в рамках одной схемы: подмена запроса Подготовка примера Построение примера Проверка работы переформулировки Построение в рамках одной БД Введение Данные, удаленные по сети, равно как и данные в очень больших таблицах нередко оказываются неудобными для приложения: или к ним долго обращаться, или доступ к ним ненадежен, или и . Одно из решений Oracle, позволяющее отчасти сгладить такое неудобство - выводимые таблицы с хранимым результатом (materialized views). Они позволяют построить хранимую локально выжимку исходных данных, и уже эффективность обращения к этой выжимке не отличается от обычных таблиц. В данной статье рассматриваются механизмы построения materialized views в распределенных БД и в БД для складов данных. Во второй части статьи будут рассматриваться различные механизмы обновления хранимого результата с целью его синхронизации с обновлениями исходных данных. Общие положения Разновидности выводимых таблиц ("виртуальных", "вторичных"; "представлений") в Oracle: именованные выводимые таблицы - views: для моделирования данных и регулирования доступа к данным именованные выводимые таблицы с хранимым результатом - materialized views: для повышения эффективности доступа к данным или для программирования доступа неименованные выводимые таблицы без хранения результата - inline views: для формулирования запросов к данным В отличие от большинства других видов объектов, materialized views (за исключением одной их разновидности) не являются функционально самостоятельным видом объектов и чаще всего их функциональность может моделироваться вручную с помощью аппарата триггеров и системного пакета DBMS_JOB. В этом случае их использование просто повышает уровень абстракции при программировании БД в Oracle.

  Запрос совпадающих и наиболее близких строк
Источник: ln Том! Я создаю отчет, в котором надо сравнивать записи из старой и новой систем. Однако нет гарантии, что для каждой записи из старой системы найдется точное совпадение. Если точно совпадающей строки нет, мне нужно выбирать "наиболее близкую" запись, в которой совпадают два заданных поля. Если такой записи нет, значит, соответствие не найдено. Ниже представлен упрощенный пример:amathur> create table old_table(old_meas_id varchar2(20), 2 field1 number(11), 3 field2 number(11), 4 field3 number(11)); Table created. amathur> create table new_table(new_meas_id varchar2(20), 2 field1 number(11), 3 field2 number(11), 4 field3 number(11)); Table created. amathur> insert into old_table values ('A_OLD',1,2,3); 1 row created.

  Что возвращать - массивы данных или результирующие множества?
Источник: ln Том! Я занимаюсь созданием API, открывающего нашу базу данных для доступа любому клиенту. Мы наконец-то начинаем использовать базу данных как базу данных, а не просто как "битоприемник" с ограниченным доступом. Чтобы предоставить данные этим клиентам, использующим различные языки программирования, мы начали обсуждать, будет ли лучше с точки зрения гибкости и/или производительности передавать результирующие множества и позволять клиенту выбирать данные в массивы для выдачи, или выполнять множественную выборку в pl/sql и возвращать заполненные массивы данных. Возврат результирующих множеств кажется привлекательнее, поскольку клиент сможет выбирать строки и заполнять свои массивы данных пакетами любого подходящего размера. Но при возврате массивов данных, похоже, каждому клиенту останется меньше работы. Я видел, что вы используете в своих примерах оба метода. Нет ли у вас предпочтения, сложившегося на основе опыта? Ответ Тома Кайта Вот цитата из моей книги "Effective Oracle by Design" (сказать, что у меня есть предпочтение - это ничего не сказать :) Возврат данных Ходят слухи, что Oracle не позволяет возвращать результирующие множества из хранимых процедур.

  Docsvision показала 100% совместимость с Microsoft SQL Server 2012.
Компания "ДоксВижн" провела тестирование совместимости платформы Microsoft SQL Server 2012 и системы управления документами и бизнес-процессами Docsvision версии 4.5 и Docsvision 5. Проведенное тестирование показало полную работоспособность Docsvision 4.5 и Docsvision 5 на SQL Server 2012. В ходе тестирования были проверены возможности создания в Docsvision новой базы данных, обновления промышленной базы данных, проверены базовые сценарии работы пользователей в системе Docsvision (навигация, регистрация документов, поиск и просмотр отчетов, исполнение заданий и т.д.), а также работа бизнес-процессов в системе. Проведенное тестирование показало полную работоспособность всех вышеперечисленных сценариев с высокой скоростью и без сбоев на Microsoft SQL Server 2012. "Мы стараемся использовать и оперативно поддерживать новейшие продукты Microsoft по мере их появления. Официальный запуск новой версии Microsoft SQL Server 2012 совпал с выходом новой платформы Docsvision 5. Мы не могли упустить эту возможность и провели тестирование совместной работы этих продуктов, то есть работы всех функций аналогично SQL Server 2008 R2.

  Mastering Oracle PL/SQL: Эффективная обработка данных
Источник: ln Избегайте неявного преобразования типов Гарантированная строгая типизация всех переменных также дает определенное повышение производительности. PL/SQL-машина очень благосклонна к разработчикам при работе с типами данных (что, по моему мнению, плохо). Попытайтесь присвоить строку числовой переменной, и сервер Oracle молча попытается преобразовать ее в число и выполнить присвоение. Присвойте дату переменной типа VARCHAR2, и она будет автоматически преобразована в строку. Помимо того, что это - не лучшая практика программирования, преобразования типов данных заметно снижают производительность. Рассмотрим пример наиболее типичного среди ленивых разработчиков приема: преобразования строк в даты. Используя регистрацию текущего времени до и после выполнения с помощью процедуры DBMS_UTILITY.GET_TIME, мы можем создать процедуру, которая будет определять, сколько времени требуется на выполнение 1000000 преобразований типов данных.create or replace procedure data_type_test is x date; y varchar2(12) := '01.03.03'; t number := dbms_utility.get_time; begin for i in 1 ..

  Мониторинг заданий
Источник: ln Как понять, что реально делает задание? Я хотел бы получать признаки жизни от посланного на выполнение SQL-оператора. Не видно никаких блокировок, которые мешали бы ему работать - я работаю на новом и практически не используемом сервере. Этот сервер должен заменить текущий производтсвенный, поэтому я, по сути, скопировал все настройки. Пришлось внести несколько изменений в файл INIT.ORA, в основном, связанных с изменением каталогов: ранее значение compatible было 7.3.2.3.0, а теперь - 7.3.4.5.0; ресурсов enqueue было 16000, а теперь - 32000 (я просто выполнил "diff" для двух файлов). Я уверен, что никаких блокировок не может быть, но ЧТО делает задание, мне непонятно. Я пытался просматривать все обнаруженные представления динамической производительности V$; где взять их полный список? В одной из книг, которую я читал, написано, что надо обращаться к представлению X$KQFVI, но его, похоже, нет... Ответ Тома Кайта Чтобы узнать, какие задания сейчас выполняются, используйте следующее представление:ops$tkyte@8i> desc dba_jobs_running Name Null? Type ----------------------------- -------- -------------------- SID NUMBER JOB NUMBER FAILURES NUMBER LAST_DATE DATE LAST_SEC VARCHAR2(8) THIS_DATE DATE THIS_SEC VARCHAR2(8) INSTANCE NUMBER Чтобы узнать, какой sql-оператор выполняет задание, и выполняет ли оно что-то вообще, можно использовать такой сценарий sqlplus:------ begin of showsql.sql -------------------------- column status format a10 set feedback off set serveroutput on select username, sid, serial#, process, status from v$session where username is not null / column username format a20 column sql_text format a55 word_wrapped set serveroutput on size 1000000 declare x number; begin for x in ( select username//'('//sid//','//serial#// ') ospid = ' // process // ' program = ' // program username, to_char(LOGON_TIME,' Day HH24:MI') logon_time, to_char(sysdate,' Day HH24:MI') current_time, sql_address, LAST_CALL_ET from v$session where status = 'ACTIVE' and rawtohex(sql_address) '00' and username is not null order by last_call_et ) loop for y in ( select max(decode(piece,0,sql_text,null)) // max(decode(piece,1,sql_text,null)) // max(decode(piece,2,sql_text,null)) // max(decode(piece,3,sql_text,null)) sql_text from v$sqltext_with_newlines where address = x.sql_address and piece < 4) loop if ( y.sql_text not like '%listener.get_cmd%' and y.sql_text not like '%RAWTOHEX(SQL_ADDRESS)%') then dbms_output.put_line( '--------------------' ); dbms_output.put_line( x.username ); dbms_output.put_line( x.logon_time // ' ' // x.current_time// ' last et = ' // x.LAST_CALL_ET); dbms_output.put_line( substr( y.sql_text, 1, 250 ) ); end if; end loop; end loop; end; / column username format a15 word_wrapped column module format a15 word_wrapped column action format a15 word_wrapped column client_info format a30 word_wrapped select username//'('//sid//','//serial#//')' username, module, action, client_info from v$session where module//action//client_info is not null; ------------------------ eof -------------------------- Он показывает: кто зарегистрирован; если сеансы активны, какой sql-оператор они выполняют; сколько времени они это делают (столбец last_call_et) Может .

  Утилита SQL*Plus. Создание и выполнение сценариев. Часть III
Источник: ln Параметры командных файлов Утилита SQL*Plus позволяет создавать командные файлы, запрашивающие у пользователя параметры и подставляющие их значение в команды по ходу выполнения. Для этого используются т.н. пользовательские переменные . Такие переменные определяются в командном файле, в частности, с помощью команды DEFINE. На пользовательские переменные можно ссылаться в командах, предваряя их имя символами & или &&. Конструкцию & называют подставляемой переменной . Команды DEFINE и UNDFEFINE Команда DEFINE позволяет определить пользовательскую переменную строкового типа и задать ей значение типа CHAR, либо получить значение определенной или всех пользовательских переменных.

  Мониторинг заданий в Oracle
Источник: ln Не так давно мне пришло письмо с вопросом о том, как контролировать задания (jobs) в Oracle. Вот почему в этом выпуске я решил представить перевод ответа Тома Кайта на давно заданный аналогичный вопрос... Кроме того, я хочу представить вам новую книгу, над переводом которой я сейчас работаю. Мониторинг заданий Как понять, что реально делает задание? Я хотел бы получать признаки жизни от посланного на выполнение SQL-оператора. Не видно никаких блокировок, которые мешали бы ему работать - я работаю на новом и практически не используемом сервере. Этот сервер должен заменить текущий производтсвенный, поэтому я, по сути, скопировал все настройки. Пришлось внести несколько изменений в файл INIT.ORA, в основном, связанных с изменением каталогов: ранее значение compatible было 7.3.2.3.0, а теперь - 7.3.4.5.0; ресурсов enqueue было 16000, а теперь - 32000 (я просто выполнил "diff" для двух файлов).

  Использование нескольких индексов для выполнения запроса
Источник: ln В этом выпуске мы рассмотрим некоторые особенности использования индексов в Oracle. Максимальное количество индексов для запроса Когда в запросе есть два и более условия с проверкой на равенство, можно использовать несколько индексов. Oracle будет "объединять" ( сливать , merge) индексы во время выполнения, возвращая строки, которые найдены по обоим индексам. Например, при выполнении запроса:SELECT ename FROM emp WHERE deptno=20 AND job='manager' может быть выполнено слияние следующих индексов: неуникального индекса по столбцу job неуникального индекса по столбцу deptno А как реально сервер осуществляет слияние индексов? Что лучше: конкатенированный индекс по столбцам job и deptno или отдельные индексы по столбцам job и deptno, которые могут быть объединены? Правда ли, что Oracle использует для запроса не более 5 индексов? Сколько максимум индексов по таблице можно создать? Ответ Тома Кайта Индексы объединяются именно так, как вы и подумали. Условие deptno=20 будет генерировать один список идентификаторов строк-кандидатов, а условие job='manager' - другой. Эти списки будут объединяться, и фактически выбраны из таблицы будут только строки, входящие в оба списка. А вот ответ на вопрос, что лучше (как всегда) зависит от многих обстоятельств.

  Особенности использования таблиц, организованных по индексу
Источник: ln В этой статье  мы рассмотрим некоторые аспекты использования таблиц, организованных по индексу (IOT). По мотивам интересного обсуждения на сайте Тома Кайта, которое началось еще в мае 2000 года. Меня интересует, как повторно использовать пространство в таблице, организованной по индексу (Index Organized Table - IOT) после удаления существенного количества строк. При работе с обычной таблицей после удаления множества строк я пересоздаю индексы, чтобы в индексных блоках не было пропусков, поскольку мы знаем, что это пустое место в индексах не будет использоваться повторно (в отличие от блоков таблиц, где это освободившееся место используется повторно, после того, как будет преодолен порог PCTUSED в блоке). Итак, что же можно сделать с таблицей, организованной по индексу, чтобы предотвратить ее постоянный рост, даже после удаления множества строк? Ответ Тома Кайта Ответ на этот вопрос, на самом деле, достаточно интересный - Oracle8i Release 8.1 позволяет выполнить два новых действия, которые делают ответ интересным: оперативное пересоздание индексов; перенос таблицы. Поскольку таблица, организованная по индексу, - это просто индекс... Мы, фактически, можем пересоздать индекс путем переноса таблицы "на ходу" (т.е.

  Каждому (пользователю) свое (данное в таблице). Часть 2
Владимир Пржиялковский Часть 1 Как "засекретить" строки в таблице (решение № 2) Оговорюсь сразу: "таблица" в заголовке - не обязательно базовая, а может быть и выводимая, то есть view. Способ, описываемый ниже, позволяет ограничить доступ к определенным строкам таблицы (базовой ли, выводимой - не важно) разным пользователям по-разному: в зависимости от условия, которое мы сами сконструируем. Способ основан на использовании системного пакета DBMS_RLS и доступен он только в Oracle, то есть для переносимости на другие СУБД это решение - не лучший вариант, хотя и не 100%-безнадежный. Основные элементы этого специфичного Oracle-решения таковы: - Создадим на PL/SQL функцию-предикат P, задающую условие на строки таблицы T.- С помощью подпрограммы из пакета DBMS_RLS создадим так называемую "политику доступа", связывающую таблицу T с этим предикатом. - Начиная с этого момента всякое обращение пользователей к таблице T будет автоматически заменяться СУБД на SELECT * FROM t WHERE p, словно бы T была выводимой таблицей с указанной формулировкой. Теперь дело техники - придумать определение для P так, чтобы эта функция отбирала для каждого пользователя только положенные ему строки. Тут тоже есть разные решения.



4 5 [ 6 ] 7

Главная »  Sql 

© 2024 Team.Furia.Ru.
Частичное копирование материалов разрешено.