Oracleいろいろ集

データファイル

データファイルの一覧を確認する。

select * from dba_data_files

FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS LOST_WRITE_PROTECT
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\USERS01.DBF 7 USERS 5242880 640 AVAILABLE 7 YES 34359721984 4194302 160 4194304 512 ONLINE OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\UNDOTBS01.DBF 4 UNDOTBS1 68157440 8320 AVAILABLE 4 YES 34359721984 4194302 640 67108864 8192 ONLINE OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SYSTEM01.DBF 1 SYSTEM 880803840 107520 AVAILABLE 1 YES 34359721984 4194302 1280 879755264 107392 SYSTEM OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SYSAUX01.DBF 3 SYSAUX 566231040 69120 AVAILABLE 3 YES 34359721984 4194302 1280 565182464 68992 ONLINE OFF

表領域の一覧を確認する。

select * from SYS.dba_tablespaces

TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FORCE_LOGGING EXTENT_MANAGEMENT ALLOCATION_TYPE PLUGGED_IN SEGMENT_SPACE_MANAGEMENT DEF_TAB_COMPRESSION RETENTION BIGFILE PREDICATE_EVALUATION ENCRYPTED COMPRESS_FOR DEF_INMEMORY DEF_INMEMORY_PRIORITY DEF_INMEMORY_DISTRIBUTE DEF_INMEMORY_COMPRESSION DEF_INMEMORY_DUPLICATE SHARED DEF_INDEX_COMPRESSION INDEX_COMPRESS_FOR DEF_CELLMEMORY DEF_INMEMORY_SERVICE DEF_INMEMORY_SERVICE_NAME LOST_WRITE_PROTECT CHUNK_TABLESPACE
SYSTEM 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM NO MANUAL DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
SYSAUX 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
UNDOTBS1 8192 65536   1 2147483645 2147483645   65536 ONLINE UNDO LOGGING NO LOCAL SYSTEM NO MANUAL DISABLED NOGUARANTEE NO HOST NO   DISABLED         SHARED DISABLED         OFF N
TEMP 8192 1048576 1048576 1   2147483645 0 1048576 ONLINE TEMPORARY NOLOGGING NO LOCAL UNIFORM NO MANUAL DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
USERS 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N

表領域を作成する

自動拡張無しの場合

CREATE TABLESPACE SCOTT2_TEST DATAFILE 'C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SCOTT2_TEST.dbf' SIZE 100M;

上記のようなオプション無しで作成した結果は以下となった。

select * from dba_data_files

FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS LOST_WRITE_PROTECT
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SYSTEM01.DBF 1 SYSTEM 880803840 107520 AVAILABLE 1 YES 34359721984 4194302 1280 879755264 107392 SYSTEM OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SYSAUX01.DBF 3 SYSAUX 576716800 70400 AVAILABLE 3 YES 34359721984 4194302 1280 575668224 70272 ONLINE OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\UNDOTBS01.DBF 4 UNDOTBS1 68157440 8320 AVAILABLE 4 YES 34359721984 4194302 640 67108864 8192 ONLINE OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\USERS01.DBF 7 USERS 5242880 640 AVAILABLE 7 YES 34359721984 4194302 160 4194304 512 ONLINE OFF
C:\APP\MASAFUMI\PRODUCT\18.0.0\ORADATA\XE\SCOTT2_TEST.DBF 13 SCOTT2_TEST 104857600 12800 AVAILABLE 13 NO 0 0 0 103809024 12672 ONLINE OFF

select * from SYS.dba_tablespaces

TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FORCE_LOGGING EXTENT_MANAGEMENT ALLOCATION_TYPE PLUGGED_IN SEGMENT_SPACE_MANAGEMENT DEF_TAB_COMPRESSION RETENTION BIGFILE PREDICATE_EVALUATION ENCRYPTED COMPRESS_FOR DEF_INMEMORY DEF_INMEMORY_PRIORITY DEF_INMEMORY_DISTRIBUTE DEF_INMEMORY_COMPRESSION DEF_INMEMORY_DUPLICATE SHARED DEF_INDEX_COMPRESSION INDEX_COMPRESS_FOR DEF_CELLMEMORY DEF_INMEMORY_SERVICE DEF_INMEMORY_SERVICE_NAME LOST_WRITE_PROTECT CHUNK_TABLESPACE
SYSTEM 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM NO MANUAL DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
SYSAUX 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING YES LOCAL SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
UNDOTBS1 8192 65536   1 2147483645 2147483645   65536 ONLINE UNDO LOGGING NO LOCAL SYSTEM NO MANUAL DISABLED NOGUARANTEE NO HOST NO   DISABLED         SHARED DISABLED         OFF N
TEMP 8192 1048576 1048576 1   2147483645 0 1048576 ONLINE TEMPORARY NOLOGGING NO LOCAL UNIFORM NO MANUAL DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
USERS 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N
SCOTT2_TEST 8192 65536   1 2147483645 2147483645   65536 ONLINE PERMANENT LOGGING NO LOCAL SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO   DISABLED         SHARED DISABLED         OFF N

ユーザ

ユーザを作成する

検証用のため、デフォルトプロファイルの制約をなくす。パスワード変更などをしないため。

alter profile DEFAULT limit

FAILED_LOGIN_ATTEMPTS unlimited

PASSWORD_LIFE_TIME unlimited

PASSWORD_LOCK_TIME unlimited

PASSWORD_GRACE_TIME unlimited

以下、ユーザ作成。プロファイルは省略→DEFAULTプロファイルが適用される。 DEFAULT TABLESPACEをUSERS以外にすると、ORA-00959と出てしまうようだ。 DEFAULT TABLESPACEを指定しないと、SYSTEMになってしまうらしい。

CREATE USER SCOTT2

IDENTIFIED BY "tiger2"

DEFAULT TABLESPACE USERS

TEMPORARY TABLESPACE TEMP

ロールを付与する

GRANT connect to SCOTT2;

GRANT UNLIMITED TABLESPACE TO scott2;

GRANT CREATE TABLE TO scott2;

DDL

テーブル作成

CREATE TABLE employee_tbl ( EMP_NUM NUMBER(7, 0), EMP_NAME VARCHAR2(100), JOB VARCHAR2(50), CMT_TEXT VARCHAR2(2000), CONSTRAINT EMPLOYEE_PK1 PRIMARY KEY (EMP_NUM) ) TABLESPACE USERS;

SQL*PLUSの設定

DBMS_OUTPUTによる出力の有効化 SQL*Plus: set serveroutput on

SQL Developer: 表示(V)→DBMS出力(D)→接続のDBMS_OUTPUTを有効化(Ctrl+N)

DML

データ作成

DECLARE

l_job employee_tbl.job%type;

BEGIN

  FOR r IN 1..2 LOOP

    IF mod(r, 3) = 1 THEN

        l_job := 'SALESMAN';

    ELSIF mod(r, 3) = 2 THEN

        l_job := 'MANAGER';

    ELSE

        l_job := 'ANALYST';

    END IF;

    DBMS_OUTPUT.PUT_LINE(r);

    INSERT INTO employee_tbl (emp_num, emp_name, job, cmt_text)

    values (r, '鈴木 一郎' || r , l_job, 'あいうえおかきくけこさしすせそ');

    END LOOP;

END;