一般来说,oracle 中的 schema 就相当于用户。当您创建用户时,Oracle 数据库会自动创建模式。具有 DDL 文件扩展名的文件是 SQL 数据定义语言文件。
创建新用户(使用 SQL Plus)
基本 SQL Plus 命令:
- connect: connects to a database
- disconnect: logs off but does not exit
- exit: exits
打开 SQL Plus 并记录:
/ as sysdba
sysdba 是一个角色,类似于 UNIX 上的“root”或 Windows 上的“管理员”。它能看到一切,能做到一切。在内部,如果您以 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.');
Select:
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 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;
Result:
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;
Result:
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 http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_1001.htm
数据库管理系统元数据
- http://www.dba-oracle.com/t_1_dbms_metadata.htm 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/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/B28359_01/server.111/b28310/general010.htm#ADMIN11562
架构对象
- http://docs.oracle.com/cd/B19306_01/server.102/b14220/schema.htm 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 https://dba.stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Oracle 中用户和模式之间的区别? https://stackoverflow.com/questions/880230/difference-between-a-user-and-a-schema-in-oracle
特权
- http://docs.oracle.com/cd/E11882_01/timesten.112/e21642/privileges.htm#TTSQL338 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://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema.php http://www.techonthenet.com/oracle/schemas/create_schema.php
创建表空间
- http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7003.htm#i2231734 http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7003.htm#i2231734
SQL Plus 命令
- http://ss64.com/ora/syntax-sqlplus.html http://ss64.com/ora/syntax-sqlplus.html