Skip to content

Если вам повезло.

Если вам повезло, то вы обладатель Delphi XE или C++Builder XE или RAD Studio XE Professional, Enterprise или Architect. Если вы работаете с базами данных под управлением СУБД MS SQL Server, то вам повезло дважды. Сейчас вы можете приобрести наш комплексный продукт DB PowerTools Developer edition для MS SQL Server c 22% скидкой.

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

PowerStudio

PowerStudio


Наш комплексный продукт DB PowerStudio предназначен для профессионалов в области баз данных и дополняет SSMS важнейшими возможностями - управление изменениями в базе данных, оптимизация и управление кодом SQL. С помощью DB PowerStudio разработчики могут быстрее создавать высококачественный SQL-код, а администраторы баз данных упростить администрирование и управление изменениями баз данных SQL Server. Удобство работы и высокая наглядность средств оптимизации позволяет сэкономить часы при поиске способа наилучшей настройки SQL. Наличие передовых развитых средств управления изменениями в БД SQL Server позволяет надежно синхронизировать различные сервера и тестовые БД, позволяя использовать весь потенциал «гибких» IT-технологий. Применение этих инструментов обеспечивает дополнительные преимущества коллективной разработки и поддержки баз данных на MS SQL Server.

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

Tagged , , , , , , , ,

DB Optimizer: свобода - осознанная необходимость

Большинство моих коллег-друзей-знакомых  администрируют базы данных, поэтому для них вполне естественно подключаться к БД с максимальными правами DBA. В то же время, Embarcadero DB Optimizer могут с успехом применять и разработчики программного обеспечения, предназначенного работать на стороне сервера БД. Написав сложную процедуру, триггер или запрос на SQL они сразу могут проверить, насколько это работает производительно и эффективно, провести тестирование работоспособности кода под планируемой или максимальной нагрузкой еще до того, как это программное обеспечение попадет в "боевую" систему. С одной стороны, программисту-разработчику не нужен уровень привилегий системного администратора БД, с другой - это даже опасно: программеры люди настолько творческие, что им ничего не стоит сделать из БД "черный квадрат супрематизма" из самых лучших гуманистических побуждений.

Embarcadero DB Optimizer Profiling

Embarcadero DB Optimizer Profiling

Недавно мне был задан вопрос: какими минимально достаточными привилегиями должен обладать пользователь MS SQL Server, чтобы он смог проводить профилирование его работы при помощи DB Optimizer?

В руководстве пользователя есть перечень требований, где сказано:

необходимые привилегии:
Для любого сервера уровня SYSADMIN достаточно.

Можно ли снизить этот уровень?

Для MS SQL 2000 пользователь должен входить в SYSADMIN - никаких других вариантов.

Для 2008 and 2005 достаточно иметь права ‘VIEW SERVER STATE’ и ‘SELECT’ на любую БД или объект.

Затруднение понимания вызывает именно последнее: права ‘SELECT’.
Ответ прост: DB Optimizer для профилирования требуются права на чтение из master. Надо дать этому логину master, как дефолтную БД и права на SELECT к любому объекту какой-нибудь базы.

И конечно,  права на CONNECT :)

Tagged , , , , ,

Знай и умей: Operational DBA.

В практической работе у каждого DBA имеется своя специфика.

Те, кто работают на "боевых" или как говорят на английском, "production" базах данных - это Operational DBA или Acting DBA. (Будем переводить? Давайте просто обозначим такого сокращенным наименованием ODBA).

Те, кто выполняют функции DBA в процессе разработки системы или на серверах разработки и тестовых базах - это "Developing DBA" (DDBA).

В основе деятельности ODBA лежат знания и умения, которые дают заказчику надежду уверенность, что важные для жизни компании БД будут в отличной форме и надежной сохранности. ODBA должен иметь обширные знания и практические умения в следующих областях:

Backup / Restore:

  • понимать возможности для backup / restore, которые СУБД предоставляет вам.
  • внедрить на ваших БД те из них, что соответствуют требованиям пользователей.
  • проводить регулярное тестирование этих backupов, чтобы убедиться, что они не испорчены и получить представление о времени, которое потребуется для восстановления БД из них.

Конфигурация / Управление производительностью (OS):

  • понимать разных видов RAID и как это влияет на производительность БД.
  • понимать как размещать массивы СУБД на этих видах конфигураций RAID для соблюдения баланса стоимости / производительности.
  • понимать, как измерять производительность сервера СУБД (CPU, memory, disk I/O).
  • понимать возможные причины возникновения «узких мест» в каждой из этих областей.

Конфигурация / Управление производительностью (SQL Server):

  • понимать особенности clustered / non-clustered индексов и в каких ситуациях какой тип индекса следует применять.
  • понимать зачем нужна статистика и как поддерживать ее в актуальном состоянии.
  • знать как определить необходимость применения индексов и случаи, когда они вредят.
  • понимать как размещать области данных БД и log-files для максимизации производительности дисковых операций.

Управление пространством для хранения / Планирование расширений:

  • понимать, как оценивать рост объемов БД.
  • понимать, как прогнозировать рост объемов по срокам / в зависимости от времени.
  • понимать что (какие аргументы) нужно обсуждать с менеджерами для того, чтобы проблемы роста объемов не стали критическими.

Безопасность (SQL Server):

  • Понимать разницу между users/logins
  • знать как найти список всех разрешений (привилегий) конкретного login в каждой имеющейся БД.
  • понимать «наследование» прав и «цепочки владения», в частности.
  • понимать, как дать пользователю только те права, которые ему необходимы, и не больше.

Восстановление / устранение сбоев

  • знать как исправить повреждения БД
  • знать что делать, если кто-то удалил таблицу БД (хотя при правильном управлении правами доступа такого не должно быть)
  • знать, как восстановить БД на любую точку пользуясь вашей системой backupов.
  • заранее проверить несколько сценариев, так что на случай, если что-либо произойдет, вы бы точно знали, что делать.

Хотя этот список я нашел в комментарии K.Brian Kelley из SQLServerCentral.com, он очень близко соответствует нашему собственному представлению. Безусловно, это - основы деятельности, поэтому список может и должен быть расширен. Наверняка, у каждого из вас есть что сказать по этому поводу - добро пожаловать в комменты.

А в заключение хотел бы привести еще один ценный комментарий с полезным добавлением:

Вникните в практически каждый аспект в вашей системе. Будьте готовы подставить свои широкие плечи, поскольку если backup идет медленно, или сеть работает со сбоями, или приложения выполняются не так, как надо, первый, к кому обратятся, будет именно DBA (поскольку данные - это самое важное). От вас потребуют не только показать, что причина проблем в данных (или наоборот, не в них), но и, частенько, чтобы вы решили эту проблему, даже если это не ваша обязанность по должности.

Tagged , , , , , , , , ,

DBA: знай и умей.

"Среди безграничного числа разнообразных существ, занимающихся различными родами деятельности в мире ИТ, есть немногочисленные и  странные сотрудники, которых обычно называют  СИС-АД-МИНы.  Еще более редкими и загадочными существами, которых не всякий руководитель сможет разглядеть, являются ДБ-АД-МИНы (название, принятое в научных кругах - DBA)."

Записки натуралиста в мире ИТ.

Это, конечно, - шутка, такой книги еще не написано, я ее выдумал. Про сисадминов и DBA вообще ходит много забавных скетчей, шуток и анекдотов.

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

Люди! Я же точно знаю, русские программеры и ай-тишники - имеют самое лучшее чувство юмора! (А то как же без юмора можно реагировать на многие сообщения об ошибках, работу некоторых программ).  А каким источником молодого, свежего и здорового веселья веет от не многочисленных комментариев в наших программах!

Неужели у вас не найдется возможности и минутки времени, вспомнить и прислать какую-нибудь шутку про DBA на русском? Давайте вместе заполним этот пробел!

Продукты компании Embarcadero предназначены для работы профессионалов БД. Я точно знаю, как выглядит настоящий ДБ-АД-МИН! :). С большим уважением мы относимся к труду разработчиков и администраторов баз данных, непростым и ответственным задачам, которые им приходится решать в современном ИТ.

В следующих постах я собираюсь перечислить эти задачи, рассказать, как выполнять общепринятые функции DBA с меньшими затратами при помощи DB Tools, привести "best practices".

С нетерпением жду DBA-фольклора, до скорых встреч,

ваш АВС

Tagged , ,

Семинар Embarcadero по средствам работы с БД в Питере.

Я здесь, значит, существую!

Простите, что долго не писал!

На самом деле, было много чего, что можно занести в блог ( даже слишком много).

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

И снова в работу!

В ближайшую неделю меня можно встретить "вживую" на семинаре в Санкт-Петербурге 28 апреля 2011 г., посвященном нашим комплексным средствам для создания и поддержки систем на основе баз данных.

Подробнее об этом семинаре написал в своем блоге Всеволод Леонов.

Регистрация на семинар здесь.

Будет приятно встретиться с моими читателями лицом к лицу.

До встречи!

Tagged , , , , ,

"Я в названии этом слышу запах ванили…"

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

Название нашей компании произошло от имени одной из самых знаменитых улиц славного города Сан-Франциско в Калифорнии - Эмбаркадеро, на которой располагался первый офис компании. А означает оно просто набережную. Эта широкая улица идет вдоль берега залива и с нее начинаются входы на многочисленные корабельные пирсы, в наше время превращенные в оригинальные музеи. Вот так выглядит улица Embarcadero в утреннем морском тумане из которого проглядывают вдали изящные конструкции моста через залив.

Набережная в Сан-Франциско

Набережная в Сан-Франциско

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

Tagged , ,

Наши живые голоса

Заканчивается зима! Дыхание весны чувствуется во всем! Все громче раздаются голоса птиц.

Наши живые голоса также можно услышать: на семинарах. Первый из серии произойдет уже завтра.

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

Еще не вечер, вы успеете зарегистрироваться!

-

Семинар «Создание и сопровождение высокопроизводительной IТ-инфраструктуры на основе инструментов Embarcadero»

Место проведения:Москва, ул. Губкина, д.8, 9-ый этаж, Конференц-зал.

От ст. метро "Академическая":

Последний вагон из центра, выход налево, затем налево, на ул. Дмитрия Ульянова. Идете по ул. Дмитрия Ульянова в сторону Ленинского проспекта до первого перекрестка - перекресток с ул. Вавилова. Переходите дорогу через трамвайные пути, идете по ул. Вавилова до Вычислительного Центра РАН Математического Института им. А.А.Дороницына. Заходите в калитку, за зданием Вычислительного Центра находится здание Математического Института им. Стеклова (розового цвета).

От ст. метро "Ленинский проспект":

Последний вагон из центра, выход на ул. Вавилова. Проезд на 14,39 трамвае до остановки "ул. Губкина", или на 4,33,62,84 троллейбусе, 111 автобусе до остановки "Универмаг Москва". Переходите через дорогу (на другую сторону Ленинского проспекта).

От ст. метро "Октябрьская" (кольцевая):

Выход на Ленинский проспект. Проезд на 4,33,62,84 троллейбусе до остановки "Универмаг Москва". Переходите через дорогу (на другую сторону Ленинского проспекта).

От ст. метро "Университет":

Выход на Ломоносовский проспект. Проезд на 4 троллейбусе до остановки "Универмаг Москва". Сворачиваете на ул. Губкина.

Организаторы: Softline, Embarcadero
Город проведения: Москва
Дата проведения: 1 марта 2011 10.00

Уважаемые дамы и господа!

Компании Softline и Embarcadero приглашают вас 1 марта 2011 года в с 10:00 до 15:00 принять участие в бесплатном семинаре «Создание и сопровождение высокопроизводительной IТ-инфраструктуры на основе инструментов Embarcadero».

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

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

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

DB PowerStudio for SQL Server объединяет несколько наиболее популярных продуктов Embarcadero для работы с базами данных в недорогой набор программных средств, который помогает специалистам, использующим SQL Server, повышать производительность и доступность баз данных.

Rapid SQL - интегрированная среда разработки, упрощающая создание сценариев на языке SQL, формирование запросов, управление объектами и версиями в работающих базах данных и репозиториях исходного кода.

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

DB Optimizer - средство повышения производительности SQL, позволяющее пользователям быстро обнаруживать, диагностировать и оптимизировать код на языке SQL с помощью интерактивного средства Visual SQL Tuner.

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

Embarcadero предоставляет профессиональным разработчикам программного обеспечения и баз данных уникальные инструменты для проектирования, строительства, оптимизации и менеджмента баз данных и прикладных программ на разных платформах и языках программирования.
Подробнее: http://soft.softline.ru/embarcadero.

Будем рады видеть вас среди участников семинара!

Участие в семинаре бесплатное!

Предварительная регистрация на семинар является обязательной!

"SELECT * …" вне закона

Когда мы говорим о БД, как правило всегда уделяем огромное внимание различного рода ограничениям на данные и их структуры. Тем не менее, даже при наличии подробной и строгой модели данных, мы не можем предусмотреть всего, что захочется сделать из самых лучших побуждений прикладному разработчику. Например, использовать запрос на выборку данных вида "Select * from …" в своем программном коде. Считается хорошим тоном не использовать такую конструкцию в тексте программы или двоичном коде. Запрашивая только необходимые колонки, можно сэкономить объемы передаваемых данных,  ускорить оптимизацию запроса, улучшить использование памяти на сервере, обеспечить нужный уровень разделения доступа и т.п. Правда, многие утверждают, что с современными СУБД и продвинутыми возможностями их оптимизаторов, выигрыш производительности стремится к нулю. Зато гибкость при изменении структур БД на этапе поддержки и эксплуатации может сохранить много времени и нервов тем же разработчикам.  Маленькая хитрость заключается в том, что можно ограничить возможности наших друзей-разработчиков средствами администратора БД.

Идея очень проста: допустим, надо ограничить возможность применять запрос "SELECT * FROM dbo.tblNoSelectStar" пользователю "test_user".  Заведем в этой табличке скрытую колонку, и дадим права на просмотр этой колонки всем, кроме указанного пользователя. Это для примера, разумеется, на практике мы будем оперировать группами и ролями.

USE master
go
CREATE DATABASE DenySelectStar
ON PRIMARY(
NAME='DenySelectStar',
FILENAME='c:\MSSQL\DATA\DenySelectStar.mdf',
SIZE=2304KB,
MAXSIZE=UNLIMITED,
FILEGROWTH=1024KB )
LOG ON (
NAME='DenySelectStar_log',
FILENAME='c:\MSSQL\DATA\DenySelectStar_log.LDF',
SIZE=576KB,
MAXSIZE=UNLIMITED,
FILEGROWTH=10% )
COLLATE Cyrillic_General_CI_AS
go

CREATE LOGIN test_user WITH PASSWORD = 'test_user_psw';
go

ALTER LOGIN test_user ENABLE
go
GRANT CONNECT SQL TO test_user
go

USE DenySelectStar
go
CREATE USER test_user FOR LOGIN test_user WITH DEFAULT_SCHEMA = DenySelectStar
go
EXEC sp_addrolemember N'db_datareader', N'test_user'
go

Мы создали тестовую базу данных, логин и пользователя этой базы. Я привел текст соответствующего скрипта, который получил с помощью своего Embarcadero DBArtisan. Это средство администрирования БД MS SQL Server, вместе с другими очень полезными инструментами управления вашими базами данных можно получить в составе нашего нового продукта: Embarcadero DB PowerStudio для MS SQL Server. Далее создаем таблицу и заполняем ее тестовыми записями.

USE DenySelectStar
go
CREATE TABLE dbo.tblNoSelectStar (
    IdentityKey     int     IDENTITY,
    fldOne          int     NULL,
    DummyColumn char(1) COLLATE Cyrillic_General_CI_AS NULL,
    CONSTRAINT PK__tblNoSel__default
    PRIMARY KEY CLUSTERED (IdentityKey)
)
go

Я не стал вставлять картинки редактора таблиц, как я создавал эту таблицу, а привел скрипт из окошка Preview. Добавлять записи можно в интерактивном редакторе данных, как на этой картинке

Отлично! Теперь зададим права  доступа:

Мы готовы! Войдем под пользователем test_user и попытаемся выполнить сакральный запрос:

Результат - отрицательный!

Следует заметить одну важную деталь: вы теперь не сможете делать запросы типа

SELECT count(*) FROM ...

вместо этого придется  использовать поле первичного ключа:

select count(t.IdentityKey) from dbo.tblNoSelectStar t

По мотивам http://www.sqlservercentral.com.

Tagged , , , , , , ,

Контрольные суммы

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

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

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

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

Эта проблема - как работать с "историческими", медленно изменяющимися данными - широко распространена в хранилищах данных и т.н. "многомерных" БД. Эта интересная тема заслуживает отдельного рассмотрения в блоге, и я предполагаю написать несколько заметок на эту тему в ближайшем будущем.

Разбираясь в структуре этой БД, я наткнулся на интересное решение, которое мы самостоятельно придумали и использовали еще тогда, а теперь распространяется как стандартное в составе средств MS SQL Server 2008. Суть вопроса в том, что при получении новой порции данных о респондентах опроса, мы должны внести только изменения атрибутов респондентов, которые изменились по сравнению с текущим состоянием данных о нем. В системе был принят подход, который гуру хранилищ данных Ральф Кимбэлл назвал "slow changing dimension type II". Это означает, что записи в таблице респондентов никогда не изменяются и не удаляются, а только добавляются новые. Эти добавленные записи становятся "текущими", отмечаются, как актуальные, а старые записи переводятся в архив. Поэтому, чтобы иметь возможность получить правильный набор атрибутов на любой день, в записи были добавлены поля даты начала действия записи и окончания действия этой записи в качестве актуальной/текущей. При добавлении новой более свежей записи в нее заносится текущая дата в качестве начала, дата окончания проставляется открытой. Старая или прежняя запись, напротив, остается с первоначальной датой начала действия и получает текущую дату в качестве даты окончания. Если делать это все буквально, то это будет занимать каждый раз безумное количество времени.

Ральф Кимбэлл советует выполнять проверку на наличие изменений в новых данных по отношению к текущей БД не на сервере, а с помощью специальной программы, которую запускают на "клиенте". Сначала мы применили именно такой подход. Закачка каждой порции данных занимала от минуты до часа в зависимости от загруженности системы и объемов поступивших данных. Анализируя "узкие места" загрузки (это также тема отдельных публикаций) мы обнаружили, что главной задержкой является скорость помещения записей на сервер. Этот подход также не позволяет применять специализированные утилиты загрузки, имеющиеся в составе каждой крупной СУБД. Как бы выполнять эту проверку не на клиенте, а на сервере?.

Решение "в лоб" путем сравнения "новых" и "старых" значений атрибутов на языке SQL в предложении INSERT дало безумные планы выполнения SQL и увеличение времени загрузки на порядок. Уж больно много полей-атрибутов надо проверить в одном условии.

А если использовать «сигнатурный подход»?: подумали мы. Сравниваются не все подряд атрибуты, а некие вычисленные значения, зависяшие от значений ВСЕХ атрибутов в записи. Причем, вычислять такие значения-сигнатуры можно заранее, в момент загрузки записей на сервер, тратя на это минимальное время. В качестве такой сигнатуры может подойти checksum по надежному алгоритму.
Например, для таблицы:

CREATE TABLE TNSTV.DEMOTRANSACTS
(
    DTRID            NUMBER      NOT NULL, -- заполняется триггером
    DTRRSPNO         NUMBER      NOT NULL,
    DTRBDAY          NUMBER      NOT NULL,
    DTREDAY          NUMBER      NOT NULL,
    DTRCRC           NUMBER      NOT NULL,
    DTRMD5     	 VARCHAR2(100)   NULL,
    DTRHOUSEHOLD     NUMBER          NULL,
    DTRGENDER        NUMBER(1,0)     NULL,
    DTRAGE           NUMBER(2,0)     NULL,
    DTRAGEGRP        NUMBER(2,0)     NULL,
    DTREDUCATION     NUMBER(2,0)     NULL
)
TABLESPACE USERS
/

Скрипт для загрузки мог бы выглядеть так:

INSERT INTO TNSTV.DEMOTRANSACTS(DTRRSPNO, DTRBDAY,DTREDAY, DTRMD5,DTRHOUSEHOLD,DTRGENDER,DTRAGE,DTRAGEGRP,DTREDUCATION )
    select
     inboxsupport.nmvalues('MEMBER_R',x.TROWSTR),
     tnstv.get_dayid(x.IEFDATE), FOREVER,
     tnstv.md5(x.TROWSTR),
     inboxsupport.nmvalues('HOUSEHOLD_NR',x.TROWSTR),
     inboxsupport.nmvalues('SEX',x.TROWSTR),
     inboxsupport.nmvalues('AGE',x.TROWSTR),
     inboxsupport.nmvalues('AGEGRP',x.TROWSTR),
     inboxsupport.nmvalues('EDUCATION',x.TROWSTR)
    from
     TNSTV.SQLINBOX x;
/*Здесь использован собственный пакет inboxsupport для доступа к входным атрибутам и  макрос FOREVER, помещающий в поле максимально возможную дату.*/


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

Что выбрать в качестве checksum-сигнатуры? Зависит от требований к системе. Для нас вполне подходили стандартные алгоритмы, среди которых имелся выбор: мы могли применить числовую Checksum – занимает меньше места, быстрее сравнивается, а могли воспользоваться встроенными в Oracle функциями.

Вот пример тестового запроса:

select
  OWA_OPT_LOCK.checksum(d.demogfx),
  tnstv.md5(d.DEMOGFX),
  d.*
from tnstv.spareddemo d
order by id;

Использует для вычисления либо функцию checksum из пакета OWA_OPT_LOCK, либо собственную функцию, которая вычисляет уже символьную строку с MD5

CREATE OR REPLACE FUNCTION TNSTV.MD5 (input_string varchar2)   return varchar2 as
begin
 return dbms_obfuscation_toolkit.md5(input_string => input_string);
end;

Это решение, может быть и не самое оптимальное, хорошо работает на практике уже более десятка лет.

Tagged , , , , , , , ,

Особенности RE баз данных Oracle: тип данных ‘number’

Во время вебинара (Web-семинар) по ER/Studio 17 ноября мне был задан вопрос о том, почему после процесса создания новой модели БД непосредственно с сервера Oracle (обратное моделирование или реверс-инженеринг) в одной из таблиц появились колонки со странным типом данных: NUMERIC(0,0).

Хочу остановиться на этом вопросе несколько подробнее. Давайте проведем соответствующий эксперимент.

В окне cmd запустим sqlplus. Выполним подключение под соответствующим логином. В данном случае я вошел под логином TNSTV.

Выполним скрипт:

CREATE TABLE TNSTV.ABC1(
    EFID          INTEGER           NOT NULL,
    EFUVSPTR     NUMBER           NOT NULL,
    EFDAYPTR     NUMBER           NOT NULL,
    EFRSPPTR     NUMBER           NOT NULL,
    EFHHPTR      NUMBER           NOT NULL,
    WEIGHT0      NUMBER(15, 8),
    EFXROW       NUMBER,
    EFMD5        VARCHAR2(100),
    EFDEMOSTR    VARCHAR2(100),
    EFPOINTID    NUMBER,
    CONSTRAINT PK1_ABC PRIMARY KEY (EFID)
    USING INDEX
        PCTFREE 10
        INITRANS 2
        MAXTRANS 255
        TABLESPACE SYSTEM
        LOGGING
        STORAGE(INITIAL 64K
                NEXT 1024K
                MINEXTENTS 1
                MAXEXTENTS UNLIMITED
                PCTINCREASE 0
                FREELISTS 1
                FREELIST GROUPS 1
                BUFFER_POOL DEFAULT
                )
)
TABLESPACE USERS;

Затем выполняем команду

DESCRIBE TNSTV.ABC1;

Смотрите, поля EFID, описанное как INTEGER, EFUVSPTR и другие, создаваемые с типом NUMBER (без указания размерности), реально получили тип данных NUMBER(38), что соответствует правилам умолчания Oracle. Embarcadero DBArtisan также показывает тип данных NUMBER(*,0), что не вызывает никакого беспокойства.

Теперь запустим ER/Studio и выполним

New - Reverse engineer an existing database

Для скорости попросим считать только таблицу TNSTV.ABC1. Двойной клик по соответствующему прямоугольнику на диаграмме даст диалог с описанием этой таблицы в созданной модели.

У наших слушателей зоркие глаза: действительно,  те поля, которые в БД создавались, как INTEGER или просто NUMBER, здесь выглядят как NUMERIC(0,0), что вызывает законные сомнения в корректности всего процесса…

Но! Давайте вспомним, что в результате Reverse Engineer - процедуры были созданы ДВЕ модели существующей базы данных: физическая и логическая (на основе физической). Если вы видите NUMERIC(0,0) в описании таблицы, значит вы работаете с ЛОГИЧЕСКОЙ моделью. Перейдем на диаграмму физической модели и посмотрим описание этой таблицы здесь.

Здесь все нормально - поля INTEGER и NUMBER остались просто NUMBER.

Преобразованием типов данных между логическими и физическими моделями (для каждого типа поддерживаемой СУБД) управляет Data Mapping. ER/Studio позволяет пользователям самим задавать необходимые соответствия, что дает гибкие инструменты поддержки комфортности работы и правильности модели данных. Об этом мы поговорим позже.

Кстати, из всего сказанного выше можно сделать вывод: если в логической модели данных вы создали атрибуты с типом данных NUMERIC(0,0), то при генерации физической модели для СУБД Oracle, будут созданы колонки с типом NUMBER без указания размерности.

Tagged , , , , ,

Bad Behavior has blocked 0 access attempts in the last 7 days.

Close