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


86

我已经申请了一家公司的实习生,作为一个问题,他们要求我为具有特定要求的公司创建架构,然后将其发送给DDL文件。我已经安装了Oracle数据库11g Express版,但是如何在Oracle数据库11g中创建新的架构?我已经在网上搜索了解决方案,但是我不知道该怎么办。创建架构后,我应该将它们邮寄到哪个文件?


create user foo ...。请阅读手册
a_horse_with_no_name 2013年

我可以知道什么是oracle自动存储管理集群吗?
编码员

4
该站点不能代替您自己研究和学习产品文档。搜索Ben为该术语提供的链接将告诉您什么是ASM。您需要从头开始。您不能期望这里的人能解释整个Oracle,这是一个太大的话题。甚至解释您遇到的每个新名词。也许您应该向公司解释您不具备任何Oracle知识,但想学习并了解他们是否可以为您提供培训。
亚历克斯·普尔

1
对于完全不熟悉Oracle的人,如果您能够使用Oracle Database XE,则可以简化该过程。XE提供了一个Web UI来创建新的用户/模式(也称为“ Application Express工作区”),我已经在XE 11.2中进行了尝试。感谢@vitfo提供以下完整的11g详细答案。
保罗

Answers:


239

一般来说,oracle中的模式与用户相同。创建用户时,Oracle数据库会自动创建模式。带有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;

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

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 sysdbaWindows命令外壳”。
Uwe Keim

3
也很方便:GRANT CREATE VIEW TO <用户>; 向<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 '18

您能给我们完整的sqlplus命令吗?就像,根据上面刚刚创建的用户,具有完整的命令sqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
Stephane '18

ORA-65096: invalid common user or role name运行create user ... default tablespace ...命令时出现错误
cryanbhu


15

让我们开始吧。您对Oracle有任何了解吗?

首先,您需要了解什么是SCHEMA。模式是数据或模式对象的逻辑结构的集合。模式归数据库用户所有,并且与该用户同名。每个用户都拥有一个架构。可以使用SQL创建和处理模式对象。

  1. 创建用户编码器;-每当在Oracle中创建新用户时,都会创建一个与用户名同名的架构,用于存储其所有对象。
  2. 将代码创建会话授予编码器;-否则您将无能为力。

要访问另一个用户的架构,您需要被授予对该架构上特定对象的特权,或者可以选择分配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从连接名更改为用户名密码。测试连接应通过。连接后,您将看到架构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.