如何在Oracle Database 11g中创建新架构/新用户?

aco*_*der 78 sql database schema database-design oracle11g

我已申请在公司实习,作为一个问题,他们要求我为他们的公司创建一个具有特定要求的模式,并将它们邮寄给DDL文件.我已经安装了Oracle数据库11g Express版,但是如何在Oracle数据库11g中创建新的模式?我在网上搜索了一个解决方案,但我无法理解该怎么做.在创建架构后,我应该将哪个文件邮寄给他们?

vit*_*tfo 225

一般来说,oracle中的模式与用户相同.创建用户时,Oracle数据库会自动创建架构.具有DDL文件扩展名的文件是SQL数据定义语言文件.

创建新用户(使用SQL Plus)

基本SQL Plus命令:

  - connect: connects to a database
  - disconnect: logs off but does not exit
  - exit: exists
Run Code Online (Sandbox Code Playgroud)

打开SQL Plus并记录:

/ as sysdba
Run Code Online (Sandbox Code Playgroud)

sysdba是一个角色,就像unix上的"root"或Windows上的"Administrator".它看到了所有,可以做到.在内部,如果以sysdba身份连接,则模式名称将显示为SYS.

创建用户:

SQL> create user johny identified by 1234;
Run Code Online (Sandbox Code Playgroud)

查看所有用户并检查用户johny是否在那里:

SQL> select username from dba_users;
Run Code Online (Sandbox Code Playgroud)

如果您现在尝试以johny身份登录,则会收到错误消息:

ERROR:
ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
Run Code Online (Sandbox Code Playgroud)

要登录的用户至少需要创建会话权限,因此我们必须将此权限授予用户:

SQL> grant create session to johny;
Run Code Online (Sandbox Code Playgroud)

现在您可以以用户johny身份进行连接:

username: johny
password: 1234
Run Code Online (Sandbox Code Playgroud)

要删除用户,您可以删除它:

SQL> drop user johny;
Run Code Online (Sandbox Code Playgroud)

这是展示如何创建用户的基本示例.它可能更复杂.上面我们创建了一个用户,其对象存储在数据库默认表空间中.为了使数据库整洁,我们应该将用户对象放在他自己的空间中(表空间是数据库中可以包含模式对象的空间分配).

显示已创建的表空间:

SQL> select tablespace_name from dba_tablespaces;
Run Code Online (Sandbox Code Playgroud)

创建表空间:

SQL> create tablespace johny_tabspace
  2  datafile 'johny_tabspace.dat'
  3  size 10M autoextend on;
Run Code Online (Sandbox Code Playgroud)

创建临时表空间(Temporaty表空间是数据库中的空间分配,可以包含仅在会话期间保留的临时数据.在进程或实例失败后无法恢复此临时数据.):

SQL> create temporary tablespace johny_tabspace_temp
  2  tempfile 'johny_tabspace_temp.dat'
  3  size 5M autoextend on;
Run Code Online (Sandbox Code Playgroud)

创建用户:

SQL> create user johny
  2  identified by 1234
  3  default tablespace johny_tabspace
  4  temporary tablespace johny_tabspace_temp;
Run Code Online (Sandbox Code Playgroud)

授予一些特权:

SQL> grant create session to johny;
SQL> grant create table to johny;
SQL> grant unlimited tablespace to johny;
Run Code Online (Sandbox Code Playgroud)

以johny身份登录并查看他拥有的权限:

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
Run Code Online (Sandbox Code Playgroud)

使用create table权限,用户可以创建表:

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

插入数据:

SQL> insert into johny_table (id, text)
  2  values (1, 'This is some text.');
Run Code Online (Sandbox Code Playgroud)

选择:

SQL> select * from johny_table;

ID  TEXT
--------------------------
1   This is some text.
Run Code Online (Sandbox Code Playgroud)

要获取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;
Run Code Online (Sandbox Code Playgroud)

结果:

  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"
Run Code Online (Sandbox Code Playgroud)

索引:

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;
Run Code Online (Sandbox Code Playgroud)

结果:

  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"
Run Code Online (Sandbox Code Playgroud)

更多信息:

DDL

DBMS_METADATA

架构对象

架构和用户之间的差异

特权

创建用户/架构

创建表空间

SQL Plus命令

  • 开头的“ / as sysdba”表示从Windows命令外壳运行“ c:\ oraclexe \ app \ oracle \ product \ 11.2.0 \ server \ bin \ sqlplus.exe / as sysdba`”。 (2认同)
  • 也很方便:GRANT CREATE VIEW TO <用户>; 向<user>授予创建序列; (2认同)

nhu*_*uvy 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;
Run Code Online (Sandbox Code Playgroud)


小智 14

让我们开始吧.你对Oracle有什么了解吗?

首先,您需要了解SCHEMA是什么.模式是数据或模式对象的逻辑结构的集合.模式由数据库用户拥有,并且与该用户具有相同的名称.每个用户拥有一个架构.可以使用SQL创建和操作模式对象.

  1. CREATE USER acoder; - 无论何时在Oracle中创建新用户,都会创建一个与用户名同名的模式,其中存储所有对象.
  2. 授予创建会话以进行讨论; - 不这样做你不能做任何事情.

要访问其他用户的架构,需要为该架构上的特定对象授予特权,或者可以选择分配SYSDBA角色.

这应该让你开始.


小智 5

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>
Run Code Online (Sandbox Code Playgroud)