当前位置: 首页 > 知识库问答 >
问题:

如何在Oracle数据库11g中创建新模式/新用户?

韦熙云
2023-03-14

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

共有3个答案

池俊茂
2023-03-14

让我们开始吧。你有甲骨文方面的知识吗?

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

  1. 创建用户acoder;--无论何时在Oracle中创建新用户,都会创建一个与用户名同名的模式,其中存储了用户的所有对象。
  2. 将创建会话授予acoder;——如果做不到这一点,你就什么也做不了

若要访问另一个用户的架构,您需要被授予该架构上特定对象的特权,或者可选地分配SYSDBA角色。

这应该让你开始。

孙修贤
2023-03-14

这是一个有效的例子:

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;
胡飞鹏
2023-03-14

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

创建新用户(使用SQLPlus)

基本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数据,您可以使用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

  • http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_1001.htm

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/b14220/schema.htm

模式和用户之间的差异

  • https://dba.stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
  • Oracle中用户和架构之间的区别?

特权

  • http://docs.oracle.com/cd/E11882_01/timesten.112/e21642/privileges.htm#TTSQL338

创建用户/模式

  • http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm
  • http://www.techonthenet.com/oracle/schemas/create_schema.php

创建表空间

  • http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7003.htm#i2231734

SQL Plus命令

  • http://ss64.com/ora/syntax-sqlplus.html
 类似资料:
  • 我在Linux虚拟机上安装了Oracle Database 11g Express Edition 11.2.0.2.0-64位产品。linux机器没有桌面环境,因此无法使用SQL Developer软件。据Oracle称,SQLcl是Oracle数据库的命令行界面,它结合了SQL*Plus和SQL Developer的强大功能。我现在已经安装了SQLcl(SQL开发人员命令行),并且能够在lin

  • 我已经在我的机器上安装了Oracle 11g XE。现在我通过系统模式连接它。如何创建自己的数据库。就像在MS SQL中使用 如何在Oracle11gXe中创建这样的数据库。

  • 问题内容: 使用SQLAlchemy,将创建一个Engine对象,如下所示: 如果to参数(在这种情况下为)中指定的数据库不存在,则访问将失败。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库? 问题答案: 在postgres上,通常默认情况下存在三个数据库。如果您能够以超级用户身份(例如,角色)进行连接,则可以连接到或数据库。默认的pg_hba.conf只允许名为unix

  • 我对oracle数据库非常陌生,请原谅我在问题中的任何技术错误。我使用的是oracle 19c,我认为我的“system”用户密码与“sysdba”用户密码不同。在安装时,我每次都使用相同的密码,但现在连接到system或“\as sysdba”时,连接没有问题,但当我键入“orcl_listener”或“orcl”或“sysdba”的密码时,密码是错误的。例如:conn sysdba输入密码:错

  • 问题内容: 我想在Oracle数据库中创建一个临时表 就像是 在SQL Server中 然后用选择语句填充它 是否有可能? 谢谢 问题答案: 是的,Oracle有临时表。这是描述它们的AskTom文章的链接,这是oracle的官方CREATE TABLE文档。 但是,在Oracle中,只有临时表中的 数据 是临时的。该表是其他会话可见的常规对象。在Oracle中频繁创建和删除临时表是一种不好的做法

  • 问题内容: 作为MySQL的新手,我已经安装了最新版本的MySQL Workbench(5.2.33)。我想知道如何使用此应用程序创建数据库。在SQL编辑器的“概述”选项卡中,几乎没有显示“ MySQL模式”,这些模式是现有数据库吗? 问题答案: 启动MySQL Workbench。 在欢迎窗口的左窗格中,在“打开连接以开始查询”下选择要连接的数据库。 查询窗口将打开。在其左窗格上,有一个标题为“