вторник, 26 марта 2013 г.

Tablespace

Здесь краткое, но емкое описание того, что такое табличное пространство и с чем его едят. За информацию благодарю своего коллегу и друга Николая =)

такое табличное пространство? Это файл или группа файлов - короче хранилище где будут лежать данные. Изначально в базе создаётся их несколько - sys - для словаря данных, тemp - для временных данных, undo - для хранения сегментов отката и собственно users - для всех остальных пользовательских данных. Но конечно же ты можешь создавать свои ТП и назначать их пользователю, таблице, индексу - да чему угодно. Это просто контейнер для данных. То что ты прописываешь в создании схемы-пользователя ТП - это ты просто назначаешь ТП по умолчанию для всех создаваемых объектов в этой схеме, но никто не мешает создать таблицу в ЭТОЙ же схеме, но в другом ТП , а индекс для неё ещё в другом ТП. Всё это прозрачно - ты никогда не обращаешься к ТП напрямую. Создают много ТП не в целях некоего отгорожения данных или защиты - а только ради быстродействия и возможно упрощения администрирования. Поэтому в большинстве - подавляющем большинстве хватает Users за глаза. Тем более что если используется ASM - там вообще нет смысла разносить данные по разным - потому как уже само ТП состоит из кучи разбросанных по диску файловещё раз - ТП - это только место хранения в ТЕКУЩЕЙ БД

понедельник, 4 марта 2013 г.

E-mail sending using PL/SQL

DECLARE
       c utl_smtp.connection;
 
       PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS
       BEGIN
         utl_smtp.write_data(c, name || ': ' || header || utl_tcp.CRLF);
       END;
 
     BEGIN
      c := utl_smtp.open_connection('mail.test.by');
       utl_smtp.helo(c, 'mail.test.by');
       utl_smtp.mail(c, 'sender_email');
       utl_smtp.rcpt(c, 'receiver_email');
       utl_smtp.open_data(c);
       send_header('From',    '"Sender" sender_email');
       send_header('To',      '"Recipient" receiver_email');
       send_header('Subject', 'Hello');
       utl_smtp.write_data(c, utl_tcp.CRLF || 'Hello, world!');
       utl_smtp.close_data(c);
      utl_smtp.quit(c);
     EXCEPTION
       WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
         BEGIN
           utl_smtp.quit(c);
         EXCEPTION
           WHEN utl_smtp.transient_error OR utl_smtp.permanent_error THEN
             NULL; -- When the SMTP server is down or unavailable, we don't
                   -- have a connection to the server. The quit call will
                   -- raise an exception that we can ignore.
        END;
         raise_application_error(-20000,
           'Failed to send mail due to the following error: ' || sqlerrm);
     END;
  /
  commit;