Oracle Database 11g에서 새 스키마 / 새 사용자를 생성하는 방법은 무엇입니까?


86

나는 회사에서 인턴십을 신청했으며 질문으로 특정 요구 사항을 가진 회사의 스키마를 만들고 DDL 파일을 우편으로 보내달라고 요청했습니다 . Oracle Database 11g Express Edition을 설치했지만 Oracle Database 11g에서 새 스키마를 생성하려면 어떻게해야합니까? 해결책을 찾기 위해 인터넷에서 검색했지만 어떻게해야할지 이해할 수 없었습니다. 그리고 스키마를 만든 후 어떤 파일을 메일로 보내야합니까?


create user foo .... 설명서를 읽으십시오
a_horse_with_no_name 2013-08-23

Oracle 자동 스토리지 관리 클러스터가 무엇인지 알 수 있습니까?
acoder 2013-08-23

4
이 사이트는 제품 문서에서 직접 조사하고 학습하는 대신 사용할 수 없습니다. Ben이 해당 용어에 대해 제공 한 링크를 검색하면 ASM이 무엇인지 알 수 있습니다. 처음부터 시작해야합니다. 여기 사람들이 오라클 전체를 설명 할 것이라고 기대할 수는 없습니다. 오라클의 주제는 너무나도 많습니다. 또는 새로운 용어를 접할 때마다 설명 할 수도 있습니다. 오라클에 대한 지식이 없지만 배우고 교육을 제공 할 수 있는지 알고 싶다고 회사에 설명해야 할 수도 있습니다.
Alex Poole

1
Oracle을 완전히 처음 접하는 사람들의 경우 Oracle Database XE를 사용할 수 있으면 프로세스가 단순화됩니다. XE는 새로운 사용자 / 스키마 ( "Application Express Workspace"라고도 함)를 생성 할 수있는 웹 UI를 제공합니다. 저는 XE 11.2에서이 작업을 시도했습니다. 아래의 전체 자세한 11g 답변은 ​​@vitfo에 감사드립니다.
Paul

답변:


242

일반적으로 오라클의 스키마는 사용자와 동일합니다. 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에서는 "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

스키마 개체

스키마와 사용자의 차이점

특권

사용자 / 스키마 생성

테이블 스페이스 생성

SQL Plus 명령


3
/ as sysdba시작 수단으로는 "실행하는 c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdbaWindows 명령 쉘에서".
Uwe Keim

3
또한 편리합니다 : GRANT CREATE VIEW TO <user>; <user>에게 CREATE SEQUENCE를 부여하십시오.
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̀
스테판

우리에게 완전한 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


15

시작하겠습니다. Oracle에 대한 지식이 있습니까?

먼저 SCHEMA가 무엇인지 이해해야합니다. 스키마는 데이터의 논리적 구조 또는 스키마 개체의 모음입니다. 스키마는 데이터베이스 사용자가 소유하며 해당 사용자와 이름이 같습니다. 각 사용자는 단일 스키마를 소유합니다. 스키마 개체는 SQL로 만들고 조작 할 수 있습니다.

  1. 사용자 acoder 생성; -Oracle에서 새 사용자를 생성 할 때마다 사용자 이름과 동일한 이름의 스키마가 생성되어 모든 객체가 저장됩니다.
  2. acoder에 CREATE SESSION을 부여하십시오. -이렇게하지 않으면 아무것도 할 수 없습니다.

다른 사용자의 스키마에 액세스하려면 해당 스키마의 특정 개체에 대한 권한을 부여 받거나 선택적으로 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.