Oracle XE是Oracle的免费版,跟收费版相比,自然有些限制。
但是,在教学,自学等场合,还是很好的。
笔者在本机Windows10上装了Oracle XE 18c,然后就开始一顿折腾了。
1,DBA账户
这个就是在安装的时候,让你输入密码的,只输入一个密码,但是是3个账户公用。
就是System,Sys,PDBAdmin。
2,创建完之后使用SqlDeveloper或Sqlplus登录
--SqlDeveloper--
连接类型:Basic
角色:Default
主机名:填localhost或自己的IP
SID:xe
如果用Sqlplus的话,那就是 Sqlplus System/password@localhost:1523
※注意这里的端口是1523
这张图可能是大家想要的吧,安装完,就tm没了,贴一下:
3,创建新用户
基本步骤就是1)创建表空间; 2)创建临时表空间 3)创建用户 4)赋权限
1)创建表空间
CREATE TABLESPACE S100D
DATAFILE 'c:\usr\lib\oracle\xe\S100D.dbf' SIZE 100M
SEGMENT SPACE MANAGEMENT AUTO;
坑来啦,居然出错了:
ORA-02236: 文件名无效。
02236. 00000 - "invalid file name"
*Cause: A character string literal was not used in the filename list
of a LOGFILE, DATAFILE, or RENAME clause.
*Action: Use correct syntax.
如果你直接创建角色或用户的话,会出以下错误:
ORA-65096: 共通用户或角色名无效。
这是为啥呢,Oracle 12c开始呢,Oracle导入了多租户结构,我们使用System的时候,就是默认登入了这个多租户Session。
玩salesforce等系统的朋友都知道,多租户的话,有个特点,就是牵一发而动全身,你影响别人,那肯定不行,所以就不是那么简单的建用户了。
对于我们学习者来说,用不了那么高级的,要把这个多租户切换为可插拔session,然后就可以所心所欲的建了。
a) 确认Session类型:
show con_name;
CON_NAME
------------------------------
CDB$ROOT 这就是多租户
b)切换为可插拔Session
alter session set container = XEPDB1;
Session已经变更。
※这个XEPDB1是什么呢,就是默认给你建好的一个DB的服务名。
Sessoin变更之后,再执行一遍创建表空间的SQL语句,就可以了。
TABLESPACE S100D创建成功。
2)创建临时表空间
CREATE TEMPORARY TABLESPACE S001T
TEMPFILE 'c:\usr\lib\oracle\xe\S001T.dbf' SIZE 100M
AUTOEXTEND ON;
TABLESPACE S100T创建成功。
修改默认临时表空间:默认是Tmp,这个其实改不改都行吧。
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE S100T;
3)创建用户
--创建共通角色
CREATE ROLE "XE_CONNECT";
GRANT ALTER SESSION TO "XE_CONNECT";
GRANT CREATE CLUSTER TO "XE_CONNECT";
GRANT CREATE DATABASE LINK TO "XE_CONNECT";
GRANT CREATE SEQUENCE TO "XE_CONNECT";
GRANT CREATE SESSION TO "XE_CONNECT";
GRANT CREATE SYNONYM TO "XE_CONNECT";
GRANT CREATE TABLE TO "XE_CONNECT";
GRANT CREATE VIEW TO "XE_CONNECT";
ALTER DATABASE SET TIME_ZONE = 'Asia/Shanghai';
※话说这个TimeZone怎么不用Beijing用Shanghai啊,我对上海充满仰慕之情,但是这个感觉怪怪的哈。
--设置Password永不过期
ALTER PROFILE DEFAULT
LIMIT PASSWORD_LIFE_TIME UNLIMITED;
--创建账户
CREATE USER S001
IDENTIFIED BY password
DEFAULT TABLESPACE S001D
TEMPORARY TABLESPACE S001T
QUOTA UNLIMITED ON S001D;
--设置用户权限 ※当然啦,这只是我认为需要的权限,还需要其他的请自行添加。
-- ■Grant Role S001 User
GRANT "XE_CONNECT" TO S001 ;
GRANT ALTER SESSION TO S001 ;
GRANT ALTER SYSTEM TO S001 ;
GRANT CREATE ANY PROCEDURE TO S001 ;
GRANT CREATE CLUSTER TO S001 ;
GRANT CREATE DATABASE LINK TO S001 ;
GRANT CREATE MATERIALIZED VIEW TO S001 ;
GRANT CREATE ROLE TO S001 ;
GRANT CREATE SEQUENCE TO S001 ;
GRANT CREATE SESSION TO S001 ;
GRANT CREATE SYNONYM TO S001 ;
GRANT CREATE TABLE TO S001 ;
GRANT CREATE TRIGGER TO S001 ;
GRANT CREATE VIEW TO S001 ;
GRANT DEBUG ANY PROCEDURE TO S001 ;
GRANT DEBUG CONNECT SESSION TO S001 ;
GRANT SELECT ANY DICTIONARY TO S001 ;
GRANT SELECT ANY TABLE TO S001 ;
GRANT UNLIMITED TABLESPACE TO S001 ;
GRANT DBA TO S001 ;
GRANT EXP_FULL_DATABASE TO S001 ;
GRANT IMP_FULL_DATABASE TO S001 ;
GRANT RESOURCE TO S001 ;
GRANT SELECT_CATALOG_ROLE TO S001 ;
4)登录刚刚创建好的用户
这步就有问题咯。请不要忘记多租户哦。
使用Sqlplus:sqlplus s001/password@localhost:1523/XEPDB1
使用SqlDeveloper的话,
连接类型:Basic
角色:Default
主机名:填localhost或自己的IP
SID:xe -------------------NG啦
要用ServiceName:XEPDB1
大家看下面这篇大神写的文章:
https://www.cnblogs.com/hello-wei/p/10179313.html