Wie erstelle ich ein neues Schema / einen neuen Benutzer in Oracle Database 11g?

82

Ich habe mich für ein Praktikum in einem Unternehmen beworben und als Frage haben sie mich gebeten, ein Schema für ihr Unternehmen mit bestimmten Anforderungen zu erstellen und ihnen die DDL- Datei zu senden . Ich habe Oracle Database 11g Express Edition installiert, aber wie erstelle ich ein neues Schema in Oracle Database 11g? Ich habe im Internet nach einer Lösung gesucht, konnte aber nicht verstehen, was ich tun soll. Und welche Datei soll ich nach dem Erstellen eines Schemas per E-Mail senden?

Akustiker
quelle
create user foo .... Bitte lesen Sie das Handbuch
a_horse_with_no_name
Kann ich wissen, was Oracle Automatic Storage Management Cluster ist?
Akustiker
4
Diese Website ist kein Ersatz dafür, dass Sie selbst recherchieren und aus der Produktdokumentation lernen. Wenn Sie den Link suchen, den Ben für diesen Begriff angegeben hat, erfahren Sie auch, was ASM ist. Sie müssen am Anfang beginnen. Man kann nicht erwarten, dass die Leute hier das gesamte Oracle erklären, es ist ein viel zu großes Thema. oder erklären Sie sogar jeden neuen Begriff, auf den Sie stoßen. Vielleicht sollten Sie dem Unternehmen erklären, dass Sie keine Oracle-Kenntnisse haben, aber gerne lernen und sehen möchten, ob sie Schulungen für Sie anbieten können.
Alex Poole
1
Für Oracle-Neulinge wird der Vorgang vereinfacht, wenn Sie Oracle Database XE verwenden können. XE bietet eine Web-Benutzeroberfläche zum Erstellen eines neuen Benutzers / Schemas (auch bekannt als "Application Express Workspace"). Ich habe dies in XE 11.2 versucht. Dank an @vitfo für die ausführliche 11g-Antwort unten.
Paul

Antworten:

234

Im Allgemeinen ist ein Schema in Oracle dasselbe wie ein Benutzer. Oracle Database erstellt automatisch ein Schema, wenn Sie einen Benutzer erstellen. Eine Datei mit der Dateierweiterung DDL ist eine SQL Data Definition Language-Datei.

Neuen Benutzer erstellen (mit SQL Plus)

Grundlegende SQL Plus-Befehle:

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

Öffnen Sie SQL Plus und protokollieren Sie:

/ as sysdba

Die sysdba ist eine Rolle und ähnelt "root" unter Unix oder "Administrator" unter Windows. Es sieht alles, kann alles. Wenn Sie eine Verbindung als sysdba herstellen, wird Ihr Schemaname intern als SYS angezeigt.

Erstellen Sie einen Benutzer:

SQL> create user johny identified by 1234;

Alle Benutzer anzeigen und prüfen, ob der Benutzer johny da ist:

SQL> select username from dba_users;

Wenn Sie jetzt versuchen, sich als Johny anzumelden, wird eine Fehlermeldung angezeigt:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied

Der Benutzer, der sich anmeldet, muss mindestens ein Sitzungsprivileg erstellen, daher müssen wir dem Benutzer diese Berechtigungen gewähren:

SQL> grant create session to johny;

Jetzt können Sie als Benutzer Johny verbinden:

username: johny
password: 1234

Um den Benutzer loszuwerden, können Sie ihn fallen lassen:

SQL> drop user johny;

Dies war ein einfaches Beispiel, um zu zeigen, wie ein Benutzer erstellt wird. Es könnte komplexer sein. Oben haben wir einen Benutzer erstellt, dessen Objekte im Standardtabellenbereich der Datenbank gespeichert sind. Damit die Datenbank aufgeräumt wird, sollten wir Benutzerobjekte in seinem eigenen Bereich platzieren (Tabellenbereich ist eine Zuweisung von Speicherplatz in der Datenbank, der Schemaobjekte enthalten kann).

Bereits erstellte Tablespaces anzeigen:

SQL> select tablespace_name from dba_tablespaces;

Tabellenbereich erstellen:

SQL> create tablespace johny_tabspace
  2  datafile 'johny_tabspace.dat'
  3  size 10M autoextend on;

Temporären Tabellenbereich erstellen (Temporärer Tabellenbereich ist eine Zuweisung von Speicherplatz in der Datenbank, der vorübergehende Daten enthalten kann, die nur für die Dauer einer Sitzung bestehen bleiben. Diese vorübergehenden Daten können nach einem Prozess- oder Instanzfehler nicht wiederhergestellt werden.):

SQL> create temporary tablespace johny_tabspace_temp
  2  tempfile 'johny_tabspace_temp.dat'
  3  size 5M autoextend on;

Erstellen Sie den Benutzer:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;

Gewähren Sie einige Privilegien:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;

Melden Sie sich als Johny an und überprüfen Sie, welche Berechtigungen er hat:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE

Mit der Berechtigung zum Erstellen einer Tabelle kann der Benutzer Tabellen erstellen:

SQL> create table johny_table
  2  (
  3     id int not null,
  4     text varchar2(1000),
  5     primary key (id)
  6  );

Daten einfügen:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');

Wählen:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.

Um DDL-Daten abzurufen, können Sie das Paket DBMS_METADATA verwenden, das "eine Möglichkeit bietet, Metadaten aus dem Datenbankwörterbuch als XML- oder Erstellungs-DDL abzurufen und das XML zum erneuten Erstellen des Objekts zu senden". (mit Hilfe von http://www.dba-oracle.com/oracle_tips_dbms_metadata.htm )

Für Tabelle:

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;

Ergebnis:

  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"

Für den Index:

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;

Ergebnis:

  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"

Mehr Informationen:

DDL

DBMS_METADATA

Schemaobjekte

Unterschiede zwischen Schema und Benutzer

Privilegien

Benutzer / Schema erstellen

Tabellenbereich erstellen

SQL Plus-Befehle

vitfo
quelle
2
Das / as sysdbaam Anfang bedeutet, " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" von einer Windows-Befehlsshell aus auszuführen .
Uwe Keim
3
Ebenfalls praktisch: GRANT CREATE VIEW TO <Benutzer>; GRANT CREATE SEQUENCE TO <Benutzer>;
Witold Kaczurba
Ich habe mich mit verbunden sqlplus system/oracle@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=XE)))und dann alle Ihre Befehle eingegeben. Aber dann connect myuserbekomme ich den FehlerORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist̀
Stephane
Könnten Sie uns den vollen sqlplusBefehl geben? Wie, basierend auf dem Benutzer, der gerade oben erstellt wurde, mit dem vollständigen Befehlsqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane
16

Es ist ein funktionierendes Beispiel:

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;
Mach Nhu Vy
quelle
14

Lassen Sie uns loslegen. Haben Sie Kenntnisse in Oracle?

Zuerst müssen Sie verstehen, was ein SCHEMA ist. Ein Schema ist eine Sammlung logischer Datenstrukturen oder Schemaobjekte. Ein Schema gehört einem Datenbankbenutzer und hat denselben Namen wie dieser Benutzer. Jeder Benutzer besitzt ein einzelnes Schema. Schemaobjekte können mit SQL erstellt und bearbeitet werden.

  1. CREATE USER Acoder; - Wenn Sie in Oracle einen neuen Benutzer erstellen, wird ein Schema mit demselben Namen wie der Benutzername erstellt, in dem alle seine Objekte gespeichert sind.
  2. GRANT CREATE SESSION TO Acoder; - Wenn Sie dies nicht tun, können Sie nichts tun.

Um auf das Schema eines anderen Benutzers zugreifen zu können, müssen Sie Berechtigungen für ein bestimmtes Objekt in diesem Schema erhalten oder optional die SYSDBA-Rolle zugewiesen bekommen.

Damit sollten Sie loslegen.

Tav
quelle
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>
Raj Sharma
quelle
0

Führen Sie vom Oracle Sql-Entwickler Folgendes im SQL-Arbeitsblatt aus:

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

Klicken Sie dann mit der rechten Maustaste auf "Oracle-Verbindung" -> Neue Verbindung, und führen Sie vom Verbindungsnamen bis zum Kennwort für den Benutzernamen alles auf den neuesten Stand. Testverbindung muss bestehen. Nach dem Verbinden sehen Sie das Schema.

Feng Zhang
quelle