我已经申请了一家公司的实习生,作为一个问题,他们要求我为具有特定要求的公司创建架构,然后将其发送给DDL文件。我已经安装了Oracle数据库11g Express版,但是如何在Oracle数据库11g中创建新的架构?我已经在网上搜索了解决方案,但是我不知道该怎么办。创建架构后,我应该将它们邮寄到哪个文件?
我已经申请了一家公司的实习生,作为一个问题,他们要求我为具有特定要求的公司创建架构,然后将其发送给DDL文件。我已经安装了Oracle数据库11g Express版,但是如何在Oracle数据库11g中创建新的架构?我已经在网上搜索了解决方案,但是我不知道该怎么办。创建架构后,我应该将它们邮寄到哪个文件?
Answers:
一般来说,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命令
/ as sysdba
一开始的手段来运行“ c:\oraclexe\app\oracle\product\11.2.0\server\bin\sqlplus.exe / as sysdba
Windows命令外壳”。
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̀
sqlplus
命令吗?就像,根据上面刚刚创建的用户,具有完整的命令sqlplus ???/???@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=127.0.0.1)(Port=1521))(CONNECT_DATA=(SID=???))
ORA-65096: invalid common user or role name
运行create user ... default tablespace ...
命令时出现错误
这是一个工作示例:
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;
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 foo ...
。请阅读手册