一般的に言えば、Oracle のスキーマはユーザーと同じです。ユーザーを作成すると、Oracle Databaseによってスキーマが自動的に作成されます。 DDL ファイル拡張子を持つファイルは、SQL データ定義言語ファイルです。
新しいユーザーの作成 (SQL Plus を使用)
基本的な SQL Plus コマンド:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exists
SQL Plus を開いてログに記録:
/ as sysdba
sysdba はロールであり、UNIX の「ルート」または Windows の「管理者」に似ています。すべてを見て、すべてを行うことができます。内部的には、sysdba として接続すると、スキーマ名は SYS のように見えます。
ユーザーを作成します:
SQL> create user johny identified by 1234;
すべてのユーザーを表示し、ユーザー johny がそこにいるかどうかを確認します:
SQL> select username from dba_users;
ここで johny としてログインしようとすると、エラーが発生します:
ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
ログインするユーザーは、少なくともセッション権限を作成する必要があるため、この権限をユーザーに付与する必要があります:
SQL> grant create session to johny;
これで、ユーザー johny として接続できるようになりました:
username: johny
password: 1234
ユーザーを削除するには、ドロップできます:
SQL> drop user johny;
これは、ユーザーの作成方法を示す基本的な例でした。もっと複雑かもしれません。上記では、オブジェクトがデータベースのデフォルトのテーブルスペースに格納されているユーザーを作成しました。データベースを整理するには、ユーザー オブジェクトを独自のスペースに配置する必要があります (テーブルスペースは、スキーマ オブジェクトを格納できるデータベース内のスペースの割り当てです)。
作成済みのテーブルスペースを表示:
SQL> select tablespace_name from dba_tablespaces;
テーブルスペースを作成:
SQL> create tablespace johny_tabspace
2 datafile 'johny_tabspace.dat'
3 size 10M autoextend on;
一時テーブルスペースを作成します (一時テーブルスペースは、セッションの間だけ持続する一時データを含むことができるデータベース内のスペースの割り当てです。この一時データは、プロセスまたはインスタンスの障害後に回復することはできません。):
SQL> create temporary tablespace johny_tabspace_temp
2 tempfile 'johny_tabspace_temp.dat'
3 size 5M autoextend on;
ユーザーを作成します:
SQL> create user johny
2 identified by 1234
3 default tablespace johny_tabspace
4 temporary tablespace johny_tabspace_temp;
いくつかの権限を付与:
SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
ジョニーとしてログインし、ジョニーが持っている権限を確認してください:
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
テーブルの作成権限があれば、ユーザーはテーブルを作成できます:
SQL> create table johny_table
2 (
3 id int not null,
4 text varchar2(1000),
5 primary key (id)
6 );
データを挿入:
SQL> insert into johny_table (id, text)
2 values (1, 'This is some text.');
選択:
SQL> select * from johny_table;
ID TEXT
--------------------------
1 This is some text.
DDL データを取得するには、「データベース ディクショナリからメタデータを XML または作成 DDL として取得し、XML を送信してオブジェクトを再作成する方法を提供する」 DBMS_METADATA パッケージを使用できます。 "nofollow noreferrer noopener" href="https://www.dba-oracle.com/oracle_tips_dbms_metadata.htm">http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )
表の場合:
SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
結果:
CREATE TABLE "JOHNY"."JOHNY_TABLE"
( "ID" NUMBER(*,0) NOT NULL ENABLE,
"TEXT" VARCHAR2(1000),
PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE"
索引の場合:
SQL> set pagesize 0
SQL> set long 90000
SQL> set feedback off
SQL> set echo off
SQL> SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) FROM USER_INDEXES u;
結果:
CREATE UNIQUE INDEX "JOHNY"."SYS_C0013353" ON "JOHNY"."JOHNY_TABLE" ("ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DE
FAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "JOHNY_TABSPACE"
詳細:
DDL
DBMS_METADATA
- http://www.dba-oracle.com/t_1_dbms_metadata.htm
- http://docs.oracle. com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS026
- http://docs.oracle. com/cd/B28359_01/server.111/b28310/general010.htm#ADMIN11562
スキーマ オブジェクト
スキーマとユーザーの違い
- https://dba. stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- ユーザー間の違いと Oracle のスキーマ?
特権
ユーザー/スキーマの作成
- http://docs.oracle.com/ cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema. php
表領域の作成
SQL Plus コマンド