一般来说,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

使用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命令

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐