Dの小部屋

忘れやすい私のメモ帳

Oracle オンライン再定義についての復習

内容

オンライン再定義を学習したはずなのに、思い出せなかったため、メモ。

確認

▼接続ユーザの確認

SQL> show user
ユーザーは"TTT"です。

▼再定義元のテーブルを作成

SQL> create table t01 (
  2    n number(1) PRIMARY KEY,
  3    v varchar2(10)
  4  );
表が作成されました。

SQL> insert into t01 values(1,'abc');
1行が作成されました。

SQL> insert into t01 values(2,'def');
1行が作成されました。

SQL> insert into t01 values(3,'ghi');
1行が作成されました。

SQL> commit;
コミットが完了しました。

▼仮テーブルを作成

SQL> create table t02 (
  2    n number(1),
  3    v varchar2(10),
  4    v2 varchar2(10)
  5  );
表が作成されました。

▼再定義できることを確認

SQL> set serveroutput on
SQL> exec dbms_redefinition.can_redef_table('TTT','T01', dbms_redefinition.cons_use_pk);
PL/SQLプロシージャが正常に完了しました。

▼再定義実行

sql> begin
  2    dbms_redefinition.start_redef_table(
  3    uname        => 'TTT',
  4    orig_table   => 'T01',
  5    int_table    => 'T02',
  6    options_flag => dbms_redefinition.cons_use_pk);
  7  end;
  8  /
PL/SQLプロシージャが正常に完了しました。

▼索引・制約のコピー

sql> declare
  2    num_errors pls_integer;
  3  begin
  4    dbms_redefinition.copy_table_dependents(
  5    uname         => 'TTT',
  6    orig_table    => 'T01',
  7    int_table     => 'T02',
  8    copy_indexes  => dbms_redefinition.cons_orig_params,
  9    num_errors    => num_errors);
 10  end;
 11  /
PL/SQLプロシージャが正常に完了しました。

▼再定義終了

SQL> begin
  2    dbms_redefinition.finish_redef_table(
  3    uname      => 'TTT',
  4    orig_table => 'T01',
  5    int_table  => 'T02');
  6  end;
  7  /
PL/SQLプロシージャが正常に完了しました。

▼確認

SQL> @desc t01
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 N                                                  NUMBER(1)
 V                                                  VARCHAR2(10)
 V2                                                 VARCHAR2(10)

SQL> @desc t02
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 N                                         NOT NULL NUMBER(1)
 V                                                  VARCHAR2(10)

SQL> select * from t01;
         N V          V2
---------- ---------- ----------
         1 abc
         2 def
         3 ghi

SQL> select * from t02;
         N V
---------- ----------
         1 abc
         2 def
         3 ghi

▼仮テーブルの削除

SQL> drop table t02;
表が削除されました。

以上

sqlplusで接続情報などを確認する方法 (def)

内容

sqlplusで接続にdefと入力すると、SIDやユーザなどを確認できる。

確認

▼コマンド

SQL> def

▼結果

DEFINE _DATE           = "16-09-06" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "##SID##" (CHAR)
DEFINE _USER           = "SYS" (CHAR)
DEFINE _PRIVILEGE      = "AS SYSDBA" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1201000200" (CHAR)
DEFINE _EDITOR         = "ed" (CHAR)
DEFINE _O_VERSION      = "Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics, Real Application Testing
and Unified Auditing options" (CHAR)
DEFINE _O_RELEASE      = "1201000200" (CHAR)

【Oracle12Cお勉強】 統合監査を触ってみる

統合監査とは?

  • 12Cからの新機能。
  • 各監査を一つにまとめられる。
  • SYS.UNIFIED_AUDIT_TRAILに情報が集約される。
  • デフォルトでは無効。有効化する必要がある。有効化には、インスタンスの停止が必要。

統合監査の有効化

▼現状確認

$ sqlplus / as sysdba
SQL> SELECT * FROM V$OPTION WHERE PARAMETER='Unified Auditing';
PARAMETER                             VALUE  CON_ID
------------------------------------- ----- -------
Unified Auditing                      FALSE       0

SQL> exit

▼データベースの停止

SQL> shutdown immediate
SQL> exit

▼有効化

$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk uniaud_on ioracle

▼データベースの起動

$ sqlplus / as sysdba
SQL> startup

▼確認

SQL> SELECT * FROM V$OPTION WHERE PARAMETER='Unified Auditing';
PARAMETER        VALUE  CON_ID
---------------- ----- -------
Unified Auditing TRUE        0

UNIFIED_AUDIT_TRAILの内容確認

▼shutdown,startupの履歴を確認

SQL> select EVENT_TIMESTAMP,DBUSERNAME,ACTION_NAME,SQL_TEXT 
  2  from unified_audit_trail 
  3  where action_name in('SHUTDOWN','STARTUP') order by 1;

EVENT_TIMESTAMP          DBUSERNAME ACTION_NAME SQL_TEXT
------------------------ ---------- ----------- ------------------
16-09-06 09:20:30.816834 SYS        STARTUP     STARTUP
16-09-06 09:23:39.365349 SYS        SHUTDOWN    SHUTDOWN IMMEDIATE
16-09-06 09:23:57.500256 SYS        STARTUP     STARTUP

▼ALTER PLUGGABLE DATABASEの履歴を確認

SQL> select EVENT_TIMESTAMP,DBUSERNAME,SQL_TEXT 
  2  from unified_audit_trail 
  3  where action_name = 'ALTER PLUGGABLE DATABASE' order by 1;

EVENT_TIMESTAMP          DBUSERNAME SQL_TEXT
------------------------ ---------- --------------------------------------------------
15-12-29 07:40:42.218214 SYS        alter pluggable database pdb$seed close
15-12-29 07:40:43.549021 SYS        alter pluggable database pdb$seed open
15-12-29 07:41:46.154337 SYS        alter pluggable database pdb$seed close immediate instances=all
15-12-29 07:41:47.960807 SYS        alter pluggable database pdb$seed OPEN READ WRITE
15-12-29 07:44:07.357800 SYS        alter pluggable database pdb1 open
15-12-29 07:44:46.727027 SYS        alter pluggable database pdb2 open
16-02-14 20:52:02.808739 SYS        alter pluggable database pdb1 open

▼ALTER DATABASEの履歴を確認

SQL> select EVENT_TIMESTAMP,DBUSERNAME,SQL_TEXT 
  2  from unified_audit_trail 
  3  where action_name = 'ALTER DATABASE' order by 1;

EVENT_TIMESTAMP          DBUSERNAME SQL_TEXT
------------------------ ---------- ------------------------
16-09-06 09:20:43.441958 SYS        ALTER DATABASE   MOUNT
16-09-06 09:21:04.468813 SYS        ALTER DATABASE OPEN
16-09-06 09:23:39.355402 SYS        ALTER DATABASE DISMOUNT
16-09-06 09:24:01.995592 SYS        ALTER DATABASE   MOUNT
16-09-06 09:24:03.054083 SYS        ALTER DATABASE OPEN

以上