Oracle Database 11gで新しいスキーマ/新しいユーザーを作成するにはどうすればよいですか?


86

私は会社でのインターンシップに応募しましたが、質問として、特定の要件を備えた会社のスキーマを作成し、DDLファイルを郵送するように求められました。Oracle Database 11g Express Editionをインストールしましたが、Oracle Database 11gで新しいスキーマを作成するにはどうすればよいですか?ネットで解決策を探しましたが、どうしたらいいのかわかりませんでした。スキーマを作成した後、どのファイルをメールで送信する必要がありますか?


create user foo ...。manual-お読みください
a_horse_with_no_name

オラクルの自動ストレージ管理クラスターとは何ですか?
acoder 2013

4
このサイトは、独自の調査を行い、製品ドキュメントから学ぶことに代わるものではありません。ベンがその用語に対して与えたリンクを検索すると、ASMが何であるかもわかります。最初から始める必要があります。ここの人々がオラクル全体を説明することを期待することはできません。それはあまりにも大きなトピックです。またはあなたが出くわすすべての新しい用語を説明することさえできます。オラクルの知識はないが、彼らがあなたにトレーニングを提供できるかどうかを学び、確認したいことを会社に説明する必要があるかもしれません。
Alex Poole

1
Oracleを初めて使用する場合、Oracle Database XEを使用できると、プロセスが簡略化されます。XEは、新しいユーザー/スキーマ(別名「ApplicationExpressWorkspace」)を作成するためのWeb UIを提供します。これは、XE11.2で試しました。以下の完全な詳細な11gの回答については、@ vitfoの功績によるものです。
ポール

回答:


239

一般的に言えば、Oracleのスキーマはユーザーと同じです。ユーザーを作成すると、OracleDatabaseは自動的にスキーマを作成します。DDLファイル拡張子の付いたファイルはSQLデータ定義言語ファイルです。

新しいユーザーの作成(SQL Plusを使用)

基本的なSQLPlusコマンド:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists

SQL Plusを開き、ログに記録します。

/ as sysdba

sysdbaは役割であり、UNIXの「root」またはWindowsの「Administrator」のようなものです。それはすべてを見て、すべてを行うことができます。内部的には、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データを取得するには、「データベースディクショナリからメタデータをXMLまたは作成DDLとして取得し、XMLを送信してオブジェクトを再作成する方法を提供する」DBMS_METADATAパッケージを使用できます。(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

スキーマオブジェクト

スキーマとユーザーの違い

特権

ユーザー/スキーマの作成

表領域の作成

SQLPlusコマンド


3
/ as sysdba「実行するために始め手段でc:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdbaWindowsコマンドシェルから」。
Uwe Keim 2016年

3
また、持っていると便利です:GRANT CREATE VIEW TO <user>; <user>にCREATESEQUENCEを付与します。
Witold Kaczurba 2017年

を使用sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))して接続し、これらすべてのコマンドを入力しました。しかし、その後、connect myuserエラーが発生しますORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane

完全なsqlplusコマンドを教えていただけますか?たとえば、上記で作成したユーザーに基づいて、完全なコマンドを実行しますsqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane

コマンドをORA-65096: invalid common user or role name実行するとエラーが発生しますcreate user ... default tablespace ...
cryanbhu

16

これは実用的な例です。

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;


15

始めましょう。Oracleについて何か知識がありますか?

まず、スキーマとは何かを理解する必要があります。スキーマは、データの論理構造またはスキーマオブジェクトのコレクションです。スキーマはデータベースユーザーによって所有され、そのユーザーと同じ名前を持ちます。各ユーザーは単一のスキーマを所有します。スキーマオブジェクトは、SQLを使用して作成および操作できます。

  1. CREATEUSERコーダー; --Oracleで新しいユーザーを作成するたびに、ユーザー名と同じ名前のスキーマが作成され、そこにすべてのオブジェクトが格納されます。
  2. コーダーにCREATESESSIONを付与します。-これを怠ると、何もできなくなります。

別のユーザーのスキーマにアクセスするには、そのスキーマ上の特定のオブジェクトに対する特権を付与するか、オプションでSYSDBAロールを割り当てる必要があります。

それはあなたが始めるはずです。


4
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>

0

oracle Sql開発者から、SQLワークシートで以下を実行します。

create user lctest identified by lctest;
grant dba to lctest;

次に、「Oracle接続」->新しい接続を右クリックし、接続名からユーザー名パスワードまですべてをlctestにします。テスト接続に合格する必要があります。接続すると、スキーマが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.