나는 회사에서 인턴십을 신청했으며 질문으로 특정 요구 사항을 가진 회사의 스키마를 만들고 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
- http://www.dba-oracle.com/t_1_dbms_metadata.htm
- http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_metada.htm#ARPLS026
- http://docs.oracle.com/cd/B28359_01/server.111/b28310/general010.htm#ADMIN11562
스키마 개체
스키마와 사용자의 차이점
특권
사용자 / 스키마 생성
- http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema.php
테이블 스페이스 생성
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로 만들고 조작 할 수 있습니다.
- 사용자 acoder 생성; -Oracle에서 새 사용자를 생성 할 때마다 사용자 이름과 동일한 이름의 스키마가 생성되어 모든 객체가 저장됩니다.
- 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로 만듭니다. 테스트 연결을 통과해야합니다. 그런 다음 연결되면 스키마가 표시됩니다.