create tablespace bi_02;

execute sys.dbms_space_admin.tablespace_migrate_to_local('USERS')

-- pocztek analizy przez Segment Advisor tabeli HR.EMPLOYEES
-- wersja 1.0 RJB 07/07/2007
--
-- zmienna SQL*Plus odczytuje numer zadania ze zmiennej task_id narzdzia Segment Advisor
-- poniej kod PL/SQL
declare
    name varchar2(100);
    descr varchar2(500);
    obj_id number;
begin
    name := ''; -- unikatowa nazwa wygenerowana przez create_task
    descr := 'Analiza tabeli HR.EMPLOYEE';
    dbms_advisor.create_task
         ('Segment Advisor', :task_id, name, descr, NULL);
    dbms_advisor.create_object
         (name, 'TABLE', 'HR', 'EMPLOYEES', NULL, NULL, obj_id);
    dbms_advisor.set_task_parameter(name, 'RECOMMEND_ALL', 'TRUE');
    dbms_advisor.execute_task(name);
end;


-- pocztek analizy przez Undo Advisor
-- wersja 1.1 RJB 16/07/2007
--
-- zmienna SQL*Plus odczytuje numer zadania ze zmiennej task_id narzdzia Segment Advisor

declare
    task_id    number;
    name       varchar2(100);
    descr      varchar2(500);
    obj_id     number;
begin
    name := ''; -- unikatowa nazwa wygenerowana przez create_task
    descr := 'Sprawdzenie przestrzeni tabel wycofania';
    dbms_advisor.create_task
         ('Undo Advisor', :task_id, name, descr);
    dbms_advisor.create_object
         (name, 'UNDO_TBS', NULL, NULL, NULL, 'null', obj_id);
    dbms_advisor.set_task_parameter(name, 'TARGET_OBJECTS', obj_id);
    dbms_advisor.set_task_parameter(name, 'START_SNAPSHOT', 6);
    dbms_advisor.set_task_parameter(name, 'END_SNAPSHOT', 8);
    dbms_advisor.set_task_parameter(name, 'INSTANCE', 1);
    dbms_advisor.execute_task(name);
end;


v
 Anonimowa procedura PL/SQL zmieniajca prg Tablespace Space Usage

declare
    /* WYJCIE */
    warning_operator number;
    warning_value varchar2(100);
    critical_operator number;
    critical_value varchar2(100);
    observation_period number;
    consecutive_occurrences number;
    /* WEJCIE */
    metrics_id number;
    instance_name varchar2(50);
    object_type number;
    object_name varchar2(50);

    new_warning_value varchar2(100) := '60';
begin
    metrics_id := DBMS_SERVER_ALERT.TABLESPACE_PCT_FULL;
    object_type := DBMS_SERVER_ALERT.OBJECT_TYPE_TABLESPACE;
    instance_name := 'dw';
    object_name := NULL;

-- Pobranie biecych wartoci za pomoc metody get_threshold
     dbms_server_alert.get_threshold(
          metrics_id, warning_operator, warning_value,
          critical_operator, critical_value,
          observation_period, consecutive_occurrences,
          instance_name, object_type, object_name);

-- Zmiana wartoci progowej ostrzeenia z 85 na 60
     dbms_server_alert.set_threshold(
          metrics_id, warning_operator, new_warning_value,
          critical_operator, critical_value,
          observation_period, consecutive_occurrences,
          instance_name, object_type, object_name);

end;

    after suspend on database - uruchamiana, gdy nastpi wznowienie operacji
declare
     zmienne, jeli wymagane
begin
     2 godziny dla administratora na rozwizanie problemu
    dbms_resumable.set_timeout(7200);
     sprawdzenie w DBA_RESUMABLE ID uytkownika i wysanie e-maila
    utl_mail.send ('karen_s@rjbdba.com', . . . );
end;


select s.tablespace_name, s.segment_name,
       s.segment_type, s.owner
from dba_segments s
where s.next_extent >=
      (select max(f.bytes)
       from dba_free_space f
       where f.tablespace_name = s.tablespace_name)
or s.extents = s.max_extents
order by tablespace_name, segment_name;



 Ilo wolnej przestrzeni w plikach danych innych ni tymczasowe, w podziale na przestrzenie tabel.

 Brak argumentw pocztkowych.
 1024*1024*1000 = 1048576000 = 1 GB, aby uzgodni si z OEM


column free_space_gb format 9999999.999
column allocated_gb  format 9999999.999
column used_gb       format 9999999.999
column tablespace    format a12
column filename      format a20

select ts.name tablespace, trim(substr(df.name,1,100)) filename,
    df.bytes/1048576000 allocated_gb,
    ((df.bytes/1048576000) - nvl(sum(dfs.bytes)/1048576000,0)) used_gb,
    nvl(sum(dfs.bytes)/1048576000,0) free_space_gb
from v$datafile df
       join dba_free_space dfs on df.file# = dfs.file_id
       join v$tablespace ts on df.ts# = ts.ts#
group by ts.name, dfs.file_id, df.name, df.file#, df.bytes
order by filename;


