Про Oracle

Discussion in 'Болталка' started by podkashey, 27 Mar 2006.

  1. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    757
    Likes Received:
    351
    Reputations:
    353
    Пишу статью первый раз, поэтому извиняйте если что-то не так.
    Сразу хочется отметить, что все что будет изложено ниже, является исключительно точкой зрения автора, поэтому возможны неточности, ошибки и даже откровенный бред. ;)
    Итак, только для www.antichat.ru :
    Введение в СУБД Oracle​
    Oracle является клиент-серверной СУБД, сильно похожей на MSSQL (для тех кто знает). Так же как в MSSQL в Oracle есть свое процедурное расширение языка sql, называющееся PL-SQL – аналог T-SQL. Программирование на Pl-SQL напоминает обычное программирование, например в Pascal. Т е существует возможность написания отдельных программ, выполняющих какие-либо действия исключительно с использованием PL-SQL.
    Мне не известны результаты тестов производительности, защищенности и тд. Но вроде как Oracle считается одной из самых защищенных и надежных СУБД, обладает огромным количеством настроек, тонкостей и соответственно стоит много денег. ;) . В связи с этим грамотные DBA (Database Administrator) Oracle очень высоко ценятся. Правда, чтобы получить сертификат нужны немалые деньги (http://www.certification.ru/library/articlesdir/big35.html?26 – чуть-чуть инфы).
    Дальше немного слухов:
    Слышал про то, что при выпуске очередной версии Oracle, компания сделала сайт на его базе и предложила его сломать всем желающим. Через месяц примерно он рухнул, но попыток взлома было очень много и компания осталась довольна результатом.
    С другой стороны в каком-то релизе СУБД, была ошибка с left join, в связи с чем, любой пользователь мог получать любые права. Но ее быстро устранили
    Также авторизация происходит регистронезависимая (не знаю по поводу последних версий), т е AntiChat и aNtiCHAt это один и тот же пароль или логин, что существенно увеличивает возможность подбора пароля.
    Некоторые факты по Oracle8 (вышла в 1997, по новым не знаю, кому интересно – найдет, на данный момент последняя версия Oracle10):
    - фиксирование транзакций, откат, блокировка записей и таблиц на update, insert – почти везде сейчас есть
    - встроенная в ядро Java-машина, т е можно использовать Java, а можно PL-SQL
    - управление БД, объемом до 512 ПЕТАбайт (это на 1997 год, петабайт = 1024 терабайт)
    - возможность создания распределенной БД
    - секционирование таблиц и индексов (горизонтальная фрагментация)
    - постепенный переход к объектной СУБД – абстрактные типы данных Object и др. BLOB,CLOB и др. – видео файлы, тексты и тд. Весом до 4 Гбайт.
    - политика безопасности: поддерживается срок действия пароля, блокировка аккаунта после N попыток входа и др.
    - главные пользователи SYS (По умолчанию пароль change_on_install) и SYSTEM (По умолчанию пароль manager)
    Сам SQL в Oracle мало отличается от MSSQL. Попробую описать какие-то особенности Оракла, конечно не все, но так сходу трудно сказать, что особенность, а что нет, так как не общался тесно с другими СУБД:
    Надо отметить, что каждому пользователю Oracle соответствует определенная схема – набор объектов БД: таблицы, привилегии, вьюхи и тд. У каждой схемы только один пользователь. Для просмотра схемы текущего пользователя можно использовать запрос select * from user_objects
    Выполнение команд через ; должно работать, но это не факт. Обход фильтрации кавычек можно осуществить с помощью Chr(цифры разные тут).
    Конкатенация (или как там это называется) строк осуществляется при помощи ‘stroka’||’stroka2’.
    Существует таблица dual. Используется чаще всего для вывода констант в запросах. Например, select to_date(‘20063112’,’yyyyddmm’) NY from dual, чтобы не писать везде в запросе длинную конструкцию тудэйт. To_date не обязательная контрукция, но желательная, так как формат даты зависит от настроек. Можно и DateOf = ’27.03.2006’ писать.
    Существует метатаблица ALL_TAB_COLUMNS, в которой основные поля: owner, table_name, column_name, data_type.
    Data_type может пригодится при sql-inj так как при использовании UNION требуется приводить соответствующие поля к одному типу. Null может сработать, только для строкового типа поля. Также в Oracle обязательно писать select null FROM table. Хотя в качестве table вполне сойдет dual, доступ к которой имеют все пользователи.
    Вместо top в MSSQL и limit в MySQL используется конструкция where rownum = 1 или in (1,2).
    Также в Оракле возможны операции типа:
    insert into table1 select 'че-нить типа шелла' from dual
    и
    update table1 tcd1 set tcd1.id = (select sub1.id from
    (select tcd.idCD, tor.id from tableO tor, tableCC tcc,tableCD tcd
    where tor.idO = tcc.idO and tcc.IDCC = tcd.IDCC) sub1
    where
    sub1.idCD = tcd1.idCD
    )
    where
    tcd1.idD is null
    В запрос можно не вникать – скопировал его из файла, убрав имена таблиц. ;)
    Т е можно передать в апдейт, делит и инсерт результат подзапроса.
    Есть типы полей BFILE, в которых содержится ссылка на файл. Правда не много где применяется. Думаю можно использовать в корыстных целях. ;)))
    Комментарии в Oracle обозначаются стандартно:
    --однострочный
    /*многострочный*/
    Если интересует что-то конкретно, то спрашивайте - по возможности отвечу.
     
    1 person likes this.
  2. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    757
    Likes Received:
    351
    Reputations:
    353
    Щас посмотрел на часы - чуть не прослезился - времени ушло многовато... :(
    Понял что такое писать статьи с нуля - теперь понимаю и уваажаю людей, которые их пишут. ;)
     
  3. qBiN

    qBiN Вот такой вот я :(

    Joined:
    20 Jan 2005
    Messages:
    834
    Likes Received:
    73
    Reputations:
    33
    Угу а ничего и не написал.
    Ты уж прости но это не статья, а одна вода.
     
  4. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    757
    Likes Received:
    351
    Reputations:
    353
    ZaCo попросил написать статью про отличие Oracle от других СУБД. Я написал. Можно было конечно как обычно написать, что надо подобрать количество столбцов в скл-инж, найти тот, который выводится на экран, вывести первую запись итд. Но на одном античате я думаю таких тем с десяток. Я написал то, что такое Оракл вообще и то, чем он отличается от остального.
     
  5. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2qBiN ну не соглашусь :) имхо довольно полезная статья, хоть по информации наделся чуть на большее. тем более описания оракла "вкратце" пока не видел.
    2podkashey спасибо за статью, узнал кое-чего нового. надеюсь на продолжение, хотелось бы увидеть более подроное описание пунктов:
    -встроенная в ядро Java-машина, т е можно использовать Java, а можно PL-SQL
    -Выполнение команд через ; должно работать, но это не факт
    -Null может сработать, только для строкового типа поля. Также в Oracle обязательно писать select null FROM table.
    третий не очень понятен из-за двух протеворечивых предложений+) все таки мне кажется (следуя стандартам) null - специальный типа данных, содержащий пустое значение ЛЮБОГО типа. Ещё хотелось бы узнать по-больше о системный таблицах как dual и тд
     
  6. podkashey

    podkashey С крышкой по жизни!

    Joined:
    18 Jun 2005
    Messages:
    757
    Likes Received:
    351
    Reputations:
    353
    Про это лучше почитать в интернете, потому что я не совсем понял, что ты имеешь в виду - пример программы на Java? ;)
    При установке Оракла и создании БД под него - указываешь, реализовать ли поддержку Java Или нет. Интересный факт: на Пентиуме 4 Oracle8 глючит при установке его с поддержкой Java. Надо ставить либо пропатченную версию (трудно найти, не всегда помогает), либо еще как-то. Причем причины глюков толком не ясны и много где обсуждаются в инете. Хотя на АМД все нормально.
    Работать они должны на 99,9 процентов. Не правильно выразился. Тут аналогично MSSQL... на сколько я MSSQL помню...
    select null /* не прокатит, а select null from dual/* прокатит. В отличии от MSSQL, где можно написать Union select null/* при скл-инж и не указывать откуда брать нул.
    select id from table1 union select null from dual
    выдаст ошибку ORA-1790 (описание ошибок http://nkaram.h1.ru/ora_err/16-17.htm#17 )
    Надо писать select id from table1 union select to_number(null) from dual
    Исключение составляет, если select tut_strokovoe_pole from table1 union select null from dual.
    Могут еще помочь функции to_date и to_char.
    Только сейчас обратил внимание, что забыл вставить небольшой кусок.
    select * from user_tables – таблицы схемы текущего пользователя
    select user from dual - текущий user
    select * from V$session – текущие сессии
    select * from user_objects – вся схема текущего пользователя
     
    #6 podkashey, 28 Mar 2006
    Last edited: 28 Mar 2006
Loading...