如何在Oracle数据库11g中创build新的模式/新用户?
我已经申请了一个公司的实习机会,作为一个问题,他们要求我为他们的公司创build一个具有一定要求的模式,并把他们的DDL文件邮寄给他们。 我已经安装了Oracle数据库11g Express版本,但是如何在Oracle数据库11g中创build新的模式? 我在网上search了一个解决scheme,但可以理解做什么。 创build一个模式后,我应该邮寄给他们哪个文件?
一般来说,oracle中的模式与用户相同。 Oracle数据库在您创build用户时自动创build一个模式。 具有DDL文件扩展名的文件是一个SQL数据定义语言文件。
创build新用户(使用SQL Plus)
基本的SQL Plus命令:
- connect: connects to a database - disconnect: logs off but does not exit - exit: exists
打开SQL Plus并logging:
/ as sysdba
sysdba是一个angular色,就像unix上的“root”或Windows上的“Administrator”一样。 它看到一切,可以做到一切。 在内部,如果以sysdba身份连接,模式名称将显示为SYS。
创build一个用户:
SQL> create user johny identified by 1234;
查看所有用户,并检查用户johny是否存在:
SQL> select username from dba_users;
如果你现在尝试以johny的身份login,你会得到一个错误:
ERROR: ORA-01045: user JOHNY lacks CREATE SESSION privilege; logon denied
要login的用户至less需要创build会话权限,因此我们必须将此权限授予用户:
SQL> grant create session to johny;
现在您可以以用户johny的身份连接了:
username: johny password: 1234
为了摆脱用户,你可以删除它:
SQL> drop user johny;
这是显示如何创build用户的基本示例。 这可能会更复杂。 上面我们创build了一个用户的对象存储在数据库的默认表空间。 为了让数据库整洁,我们应该把用户对象放到自己的空间(表空间是数据库中可以包含模式对象的空间分配)。
显示已经创build的表空间:
SQL> select tablespace_name from dba_tablespaces;
创build表空间:
SQL> create tablespace johny_tabspace 2 datafile 'johny_tabspace.dat' 3 size 10M autoextend on;
创build临时表空间(Temporaty表空间是数据库中的一个空间分配,它可以包含仅在会话持续时间内保留的瞬态数据。在进程或实例失败后,此瞬态数据不能恢复)。
SQL> create temporary tablespace johny_tabspace_temp 2 tempfile 'johny_tabspace_temp.dat' 3 size 5M autoextend on;
创build用户:
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身份login,并检查他具有的特权:
SQL> select * from session_privs; PRIVILEGE ---------------------------------------- CREATE SESSION UNLIMITED TABLESPACE CREATE TABLE
通过创build表特权,用户可以创build表:
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或创buildDDL的forms检索元数据,并提交XML以重新创build该对象。” (在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
- 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
架构对象
架构和用户之间的差异
- https://dba.stackexchange.com/questions/37012/difference-between-database-vs-user-vs-schema
- Oracle中用户和模式之间的区别?
特权
创build用户/模式
- http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_8003.htm
- http://www.techonthenet.com/oracle/schemas/create_schema.php
创build表空间
SQL Plus命令
让我们开始吧。 你对Oracle有什么了解吗?
首先,您需要了解SCHEMA是什么。 模式是数据或模式对象的逻辑结构的集合。 模式由数据库用户拥有,并且与该用户具有相同的名称。 每个用户拥有一个模式。 模式对象可以用SQL创build和操作。
- 创build用户acoder; – 每当在Oracle中创build一个新用户时,都将创build一个与用户名同名的模式,其中存储了所有对象。
- 授权创作会议acoder; – 没有做到这一点,你什么都做不了。
要访问另一个用户的模式,需要为该模式上的特定对象授予权限,或者可以select指定SYSDBAangular色。
这应该让你开始。
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>
这是一个工作的例子:
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;