会社でのインターンシップに応募しましたが、質問として、特定の要件を持つ会社のスキーマを作成し、DDLファイルを郵送するように依頼されました。 Oracle Database 11g Express Editionをインストールしましたが、Oracle Database 11gで新しいスキーマを作成するにはどうすればよいですか?私は解決策をネットで検索しましたが、何をすべきか理解できませんでした。スキーマを作成した後、どのファイルをメールで送信する必要がありますか?
一般的に、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;
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データを取得するには、DBMS_METADATAパッケージを使用できます。このパッケージは、「データベースディクショナリからメタデータをXMLまたは作成DDLとして取得し、XMLを送信してオブジェクトを再作成する方法を提供します」。 ( 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
スキーマオブジェクト
スキーマとユーザーの違い
特典
ユーザー/スキーマの作成
表領域の作成
SQL Plusコマンド
それは実例です:
CREATE USER auto_exchange IDENTIFIED BY 123456;
GRANT RESOURCE TO auto_exchange;
GRANT CONNECT TO auto_exchange;
GRANT CREATE VIEW TO auto_exchange;
GRANT CREATE SESSION TO auto_exchange;
GRANT UNLIMITED TABLESPACE TO auto_exchange;
始めましょう。 Oracleの知識はありますか?
まず、スキーマとは何かを理解する必要があります。スキーマは、データの論理構造またはスキーマオブジェクトのコレクションです。スキーマはデータベースユーザーによって所有され、そのユーザーと同じ名前を持ちます。各ユーザーは単一のスキーマを所有しています。スキーマオブジェクトは、SQLを使用して作成および操作できます。
別のユーザーのスキーマにアクセスするには、そのスキーマの特定のオブジェクトに対する権限を付与するか、オプションでSYSDBAロールを割り当てる必要があります。
これで開始できます。
SQL> select Username from dba_users
2 ;
USERNAME
------------------------------
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
Oracle_OCM
XS$NULL
MDSYS
USERNAME
------------------------------
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR
16 rows selected.
SQL> create user testdb identified by password;
User created.
SQL> select username from dba_users;
USERNAME
------------------------------
TESTDB
SYS
SYSTEM
ANONYMOUS
APEX_PUBLIC_USER
FLOWS_FILES
APEX_040000
OUTLN
DIP
Oracle_OCM
XS$NULL
USERNAME
------------------------------
MDSYS
CTXSYS
DBSNMP
XDB
APPQOSSYS
HR
17 rows selected.
SQL> grant create session to testdb;
Grant succeeded.
SQL> create tablespace testdb_tablespace
2 datafile 'testdb_tabspace.dat'
3 size 10M autoextend on;
Tablespace created.
SQL> create temporary tablespace testdb_tablespace_temp
2 tempfile 'testdb_tabspace_temp.dat'
3 size 5M autoextend on;
Tablespace created.
SQL> drop user testdb;
User dropped.
SQL> create user testdb
2 identified by password
3 default tablespace testdb_tablespace
4 temporary tablespace testdb_tablespace_temp;
User created.
SQL> grant create session to testdb;
Grant succeeded.
SQL> grant create table to testdb;
Grant succeeded.
SQL> grant unlimited tablespace to testdb;
Grant succeeded.
SQL>
Oracle SQL開発者から、SQLワークシートで次を実行します。
create user lctest identified by lctest;
grant dba to lctest;
次に、「Oracle接続」を右クリック->新しい接続を行い、接続名からユーザー名パスワードまですべてlctestにします。接続テストに合格しなければなりません。接続すると、スキーマが表示されます。