จะสร้าง schema ใหม่ / ผู้ใช้ใหม่ใน Oracle Database 11g ได้อย่างไร


86

ฉันได้สมัครเข้าฝึกงานใน บริษัท แห่งหนึ่งและเป็นคำถามที่พวกเขาขอให้ฉันสร้างสคีมาสำหรับ บริษัท พร้อมข้อกำหนดบางประการและส่งไฟล์DDLให้ทางไปรษณีย์ ฉันได้ติดตั้ง Oracle Database 11g Express edition แล้ว แต่ฉันจะสร้างสคีมาใหม่ใน Oracle database 11g ได้อย่างไร ฉันค้นหาวิธีแก้ปัญหาในเน็ตแล้ว แต่ไม่เข้าใจว่าต้องทำอย่างไร และหลังจากสร้างสคีมาแล้วฉันควรส่งไฟล์ใด


create user foo .... โปรดอ่านคู่มือ
a_horse_with_no_name

ฉันขอทราบว่า Oracle Storage Management Cluster คืออะไร
acoder

4
ไซต์นี้ไม่ได้ใช้แทนการทำวิจัยของคุณเองและเรียนรู้จากเอกสารประกอบผลิตภัณฑ์ การค้นหาลิงก์ที่ Ben ให้ไว้สำหรับคำนั้นจะบอกคุณว่า ASM คืออะไรเช่นกัน คุณต้องเริ่มที่จุดเริ่มต้น คุณไม่สามารถคาดหวังว่าผู้คนที่นี่จะอธิบาย Oracle ทั้งหมดเป็นหัวข้อที่ใหญ่เกินไป หรือแม้กระทั่งอธิบายทุกคำศัพท์ใหม่ที่คุณเจอ บางทีคุณควรอธิบายให้ บริษัท ทราบว่าคุณไม่มีความรู้เกี่ยวกับ Oracle แต่ต้องการเรียนรู้และดูว่าพวกเขาสามารถให้การฝึกอบรมแก่คุณได้หรือไม่
Alex Poole

1
สำหรับผู้มาใหม่ที่สมบูรณ์ใน Oracle กระบวนการนี้จะง่ายขึ้นหากคุณสามารถใช้ Oracle Database XE XE มี Web UI เพื่อสร้างผู้ใช้ / สคีมาใหม่ (หรือที่เรียกว่า "Application Express Workspace") ฉันได้ลองสิ่งนี้ใน XE 11.2 เครดิต @vitfo สำหรับคำตอบแบบเต็ม verbose 11g ด้านล่าง
พอล

คำตอบ:


242

โดยทั่วไปการพูดสคีมาใน oracle จะเหมือนกับผู้ใช้ Oracle Database สร้างสคีมาโดยอัตโนมัติเมื่อคุณสร้างผู้ใช้ ไฟล์ที่มีนามสกุลไฟล์ DDL คือไฟล์ SQL Data Definition Language

การสร้างผู้ใช้ใหม่ (โดยใช้ SQL Plus)

คำสั่งพื้นฐานของ SQL Plus:

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

เปิด SQL Plus และบันทึก:

/ as sysdba

sysdba มีบทบาทและเป็นเหมือน "root" บน unix หรือ "Administrator" บน 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

อย่างน้อยผู้ใช้ที่จะเข้าสู่ระบบจำเป็นต้องสร้าง session priviledge ดังนั้นเราต้องให้สิทธิ์นี้แก่ผู้ใช้:

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;

สร้างพื้นที่ตารางชั่วคราว (Temporaty tableace คือการจัดสรรพื้นที่ในฐานข้อมูลที่สามารถมีข้อมูลชั่วคราวที่ยังคงอยู่ในช่วงเวลาของเซสชันเท่านั้นข้อมูลชั่วคราวนี้ไม่สามารถกู้คืนได้หลังจากกระบวนการหรืออินสแตนซ์ล้มเหลว):

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


3
/ as sysdbaที่หมายถึงการเริ่มต้นในการทำงาน " c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba" จากเปลือกคำสั่งของ Windows
Uwe Keim

3
นอกจากนี้ยังมีประโยชน์: GRANT สร้างมุมมองให้กับ <user>; GRANT สร้างลำดับไปยัง <user>;
Witold Kaczurba

ฉันเชื่อมต่อโดยใช้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 หรือไม่?

ก่อนอื่นคุณต้องเข้าใจว่า SCHEMA คืออะไร สคีมาคือชุดของโครงสร้างเชิงตรรกะของข้อมูลหรือวัตถุสคีมา สคีมาเป็นของผู้ใช้ฐานข้อมูลและมีชื่อเดียวกับผู้ใช้นั้น ผู้ใช้แต่ละคนเป็นเจ้าของสคีมาเดียว สามารถสร้างและจัดการวัตถุสคีมาด้วย SQL

  1. สร้างตัวแปลงสัญญาณของผู้ใช้ - เมื่อใดก็ตามที่คุณสร้างผู้ใช้ใหม่ใน Oracle สคีมาที่มีชื่อเดียวกับชื่อผู้ใช้จะถูกสร้างขึ้นซึ่งเก็บออบเจ็กต์ทั้งหมดของเขาไว้
  2. GRANT สร้างเซสชันไปยังตัวแปลงสัญญาณ; - หากล้มเหลวคุณจะไม่สามารถทำอะไรได้

ในการเข้าถึงสคีมาของผู้ใช้รายอื่นคุณจะต้องได้รับสิทธิ์บนออบเจ็กต์เฉพาะบนสคีมานั้นหรือมีทางเลือกที่จะกำหนดบทบาท 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" -> การเชื่อมต่อใหม่จากนั้นทำการเชื่อมต่อทุกอย่างตั้งแต่ชื่อการเชื่อมต่อไปจนถึงรหัสผ่านชื่อผู้ใช้ ทดสอบการเชื่อมต่อจะผ่าน จากนั้นหลังจากเชื่อมต่อแล้วคุณจะเห็นสคีมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.