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

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



답변

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


답변

작동하는 예입니다.

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에 대한 지식이 있습니까?

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

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

다른 사용자의 스키마에 액세스하려면 해당 스키마의 특정 개체에 대한 권한을 부여 받거나 선택적으로 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로 만듭니다. 테스트 연결을 통과해야합니다. 그런 다음 연결되면 스키마가 표시됩니다.


답변