数据库
首页 > 数据库> > Oracle XE版安装与用户操作

Oracle XE版安装与用户操作

作者:互联网

文章目录

安装

安装Oracle数据库

资源

1)OracleXE112_Win64.zip 数据库服务管理平台

2)plsqldeveloper_x64.rar 第三方客户端

Oracle是一家软件公司。这家1977成立于加利福尼亚的软件公司是世界上第一个推出关系型数据管理系统(RDBMS)的公司。

现在,他们的RDBMS被广泛应用于各种操作环境:Windows NT、基于UNIX系统的小型机、IBM大型机以及一些专用硬件操作系统平台。事实上,Oracle已经成为世界上最大的RDBMS供应商,并且是世界上最主要的信息处理软件供应商。

Orace11g与Oracle 11g XE区别:

Oracle Database 11g Express 是 Oracle 数据库的免费版本,支持标准版的大部分功能,占用内存小,很不错。值得推荐。

安装注意事项

Oracle 服务

Oracle中的服务

oracle是基于服务数据库系统,只有启动服务后才能使用Oracle数据库

image-20211017151659471

  1. OracleJobSchedulerXE : 是一个外部调度任务服务,负责Oracle中的调度任务。它只有在10.1版之后才可用。一般来说是没用的。
  2. OracleMTSRecoveryService : 当Oracle参与Microsoft Transaction Server的分布式事务时,该事务负责解决有疑问的事务。
  3. OracleServiceXE : 是ORCL库的服务,它负责Oracle和数据库启动的基础。只有在服务启动时,Oracle数据库才能正常启动。
  4. OracleXEClrAgent : 在Windows平台上,Oracle提供CLR集成。由于CLR操作是使用extproc进程运行的,因此通常在单个会话中使用专用(单线程)extproc来完成。这可能不是处理CLR调用的最佳方式。ClrAgent提供了一种多线程机制,因此单个extproc进程可以服务于多个CLR调用。
  5. OracleXETNSListener : 此服务负责侦听传入的连接并将成功的连接传递给数据库引擎。请注意,如果此服务关闭,您将无法远程连接到数据库。现有连接不会受到影响。

启动和停止服务

启动OracleServiceXE和OracleXETNSListener就可以正常使用Oracle数据库了。

net start OracleServiceXE
net stop OracleServiceXE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udiZ6rhv-1634730510516)(https://i.loli.net/2021/10/18/sfWUHzIhgJ2CQnE.png)]

Oracle客户端

sqlplus客户端

Oracle安装后,自带了一个控制台的客户端,叫sqlplus,有了这个客户端,在你维护服务器时至少有可用的客户端了,虽然不好用,但比没有强。

使用sqlplus需要两步

在控制台中输入sqlplus /nolog 启动客户端,注意此时只是启动了客户端,还没有登录到Oracle。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WLt2oHor-1634730510517)(https://i.loli.net/2021/10/17/aI7cvYzr4yW8Owe.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JY3mtduY-1634730510520)(https://i.loli.net/2021/10/17/N2anpQcm9gWIBvZ.png)]

Oracle中的角色

什么是角色(role)

如果多个用户需要相同的多个权限,那么为每个用户分别赋予多个权限是繁琐的。为此可以将多个权限组合为一个角色,将角色赋予多个用户,就使得每个用户都有了相同的权限。

角色是一组相关权限的集合,使用角色最主要的目的是简化权限管理。

三个标准角色
connect role(连接角色)
resource role(资源角色)
dba role(数据库管理员角色)
ql/sql developer 客户端连接三种身份或者说角色
sysoper

即数据库操作员,权限包括:打开数据库服务器、关闭数据库服务器、备份数据库、恢复数据库、日志归档、会话限制。

sysdba

即数据库管理员,权限包括:打开数据库服务器、关闭数据库服务器、备份数据库、恢复数据库、日志归档、会话限制、管理功能、创建数据库。sys用户必须用sysdba身份才能登录,system用户可以用普通身份登录。

normal

即普通用户,权限只有查询某些数据表的数据。默认的身份是normal用户。

Oracle中的用户

MySql和Oracle

虽然一个Oracle数据库服务器中可以安装多个数据库,但是一个数据库需要占用非常大的内存空间,因此一般一个服务器只安装一个数据库。每一个数据库可以有很多用户,不同的用户拥有自己的数据库对象(比如:数据库表),一个用户如果访问其他用户的数据库对象,必须由对方用户授予一定的权限。不同的用户创建的表,只能被当前用户访问。因此在Oracle开发中,不同的应用程序只需使用不同的用户访问即可。

sysdba角色的用户

推荐使用system用户

思考:如果一个公司的数据库账户的密码丢失了,怎么办?

答:登录本机可以任意密码,然后修改用户密码【本机上可以输入任意密码去登录数据库,但是远程不可以】

normal角色的用户scott

同时Oracle为程序测试提供了一个普通用户scott,XE版本默认没有附带scott用户,可自行导入scott用户到oracle中

前提条件:使用system用户登录

导入scott用户

第一步:找到scott.sql脚本

​ 在oracle安装路径下找到scott.sql脚本文件,该文件位于oracle\product\11.2.0\server\rdbms\admin目录下

第二步:使用@导入scott脚本

@C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql

第三步:重置密码和登录状态

alter user scott identified by tiger;
alter user scott account unlock;

用户:scott,密码:tiger

该用户下包含四张表,用于学习使用。
desc dept; --查看dept表结构
名称类型描述
1DEPTNONUMBER(2)表示部门编号,由两位数字所组成
2DNAMEVARCHAR2(14)部门名称,最多由14个字符所组成
3LOCVARCHAR2(13)部门所在的位置
select * from dept;
desc emp; --查看emp表结构
名称类型描述
1EMPNONUMBER(4)雇员的编号,由四位数字所组成
2ENAMEVARCHAR2(10)雇员的姓名,由10位字符所组成
3JOBVARCHAR2(9)雇员的职位
4MGRNUMBER(4)雇员对应的领导编号,领导也是雇员
5HIREDATEDATE雇员的雇佣日期
6SALNUMBER(7,2)基本工资,其中有两位小数,五倍整数,一共是七位
7COMMNUMBER(7,2)奖金,佣金
8DEPTNONUMBER(2)雇员所在的部门编号
select * from emp;
desc salgrade; --查看salgrade表结构
名称类型描述
1GRADENUMBER工资的等级
2LOSALNUMBER此等级的最低工资
3HISALNUMBER此等级的最高工资
select * from salgrade;
desc bonus; --查看bonus表结构
名称类型描述
1ENAMEVARCHAR2(10)雇员姓名
2JOBVARCHAR2(9)雇员职位
3SALNUMBER雇员的工资
4COMMNUMBER雇员的奖金
select * from bonus;
自定义用户

在开发项目时,需要为项目创建用户

创建用户
加锁/解锁用户
修改密码
删除用户
用户的角色

尽管用户成功创建,但是还不能正常的登录Oracle数据库系统,因为该用户还没有任何权限。如果用户能够正常登录,至少需要CREATE SESSION系统权限。一般情况下,一个普通的用户(如scott),拥有CONNECT和RESOURCE两个角色即可进行常规的数据库开发工作。

授予权限

语法:GRANT角色|权限 TO 用户(角色)

GRANT CONNECT TO TOM;
GRANT RESOURCE TO TOM;

赋予TOM用户Connect角色和Resource角色后,jerry用户就可以正常开发工作了。

回收权限

REVOKE 角色|权限 FROM 用户(角色)

REVOKE CONNECT FROM TOM;
REVOKE RESOURCE FROM TOM;
-- 写一起
GRANT CONNECT, RESOURCE,DBA TO TOM;
REVOKE DBA FROM TOM;
授权其他用户访问表

语法:grant 权限 on 表 to 用户

eg:scott用户的dept表授权给kaifamiao用户

grant all on dept to kaifamiao;

eg:kaifamiao 用户查看scott用户的dept表

select * from scott.dept;

提示:必须写用户.表名,例如本例中的scott.dept;

请输入用户名:  SYSTEM                            
输入口令:                                          
连接到:                                       
Oracle Database 11g Express Edition Release                                      
SQL> grant all on kaifamiao.infos to scott;                                 
授权成功。   
SQL> exit;                                 
从 Oracle Database 11g Express Edition Relea                                          
D:\Tool\cmder>sqlplus                                                                 
SQL*Plus: Release 11.2.0.2.0 Production on                                     
Copyright (c) 1982, 2014, Oracle.  All righ                                         
请输入用户名:  scott                             
输入口令:                                                                             
连接到:                                       
Oracle Database 11g Express Edition Release                                    
SQL> select * from infos;                  
select * from infos                        
              *                            
第 1 行出现错误:                                 
ORA-00942: 表或视图不存在                                 
SQL> select * from scott.infos;            
select * from scott.infos                  
                    *                      
第 1 行出现错误:                                 
ORA-00942: 表或视图不存在                                                                         
SQL> select * from kaifamiao.infos;                                    
未选定行                                          
SQL>                                       

命令小结

-- 查看数据库的版本
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

-- 单行注释
/**
多行注释
*/

-- 创建用户
语法:CREATE USER 用户名 IDENTIFIED BY 口令 [ACCOUNT LOCK|UNLOCK]
eg:  CREATE USER LZY IDENTIFIED BY 123 ACCOUNT UNLOCK;

-- 赋于用户数据库角色(CONNECT角色|RESOURCE角色|DBA角色)
语法:GRANT 角色|权限 TO 用户
eg:  GRANT CONNECT, RESOURCE, DBA TO LZY;

-- 回收权限的语法
语法:REVOKE 角色|权限 FROM 用户
eg:  REVOKE DBA FROM LZY;

-- 修改密码 
语法:ALTER USER 用户名 IDENTIFIED BY 新密码
eg:  ALTER USER LZY IDENTIFIED BY 456;

-- 修改用户处于锁定(非锁定)状态
eg: ALTER USER LZY ACCOUNT LOCK;

-- dual虚拟表(dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情。)
SELECT SYSDATE,SYSTIMESTAMP FROM dual; -- 获得系统时间
SELECT SYS_CONTEXT('USERENV','TERMINAL') FROM dual;-- 获得主机名

select * from all_tables where owner='SCOTT';-- TEST为用户名,用户名必须是大写。

-- 查看当前登录的用户的表:
select table_name from user_tables;

Oracle数据类型

部分常用数据类型
类型含义
CHAR(length)存储固定长度的字符串。参数length指定了长度,如果存储的字符串长度小于length,用空格填充。默认长度是1,最长不超过2000字节。
VARCHAR2(length)存储可变长度的字符串。length指定了该字符串的最大长度。默认长度是1,最长不超过4000字符。
NUMBER(p,s)既可以存储浮点数,也可以存储整数,p表示数字的最大位数(如果是小数包括整数部分和小数部分和小数点,p默认是38位),s是指小数位数。
DATE存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间从公元前4712年1月1日到公元后4712年12月31日。
TIMESTAMP不但存储日期的年月日,时分秒,以及秒后6位,同时包含时区。
CLOB存储大的文本,比如存储非结构化的XML文档
BLOB存储二进制对象,如图形、视频、声音等。

小贴士:

问题
NUMBER类型示例
格式输入的数字实际的存储
NUMBER1234.5671234.567
NUMBER(6,2)123.4567123.46
NUMBER(4,2)12345.67输入的数字超过了所指定的精度,数据库不能存储
日期类型

对于日期类型,可以使用sysdate内置函数可以获取当前的系统日期和时间,返回DATE类型,用systimestamp函数可以返回当前日期、时间和时区。

创建表和约束

创建infos表(学生表)
CREATE TABLE INFOS
(
  STUID VARCHAR2(7) NOT NULL,       --学号 学号=‘S’+班号+2位序号 
  STUNAME VARCHAR2(10) NOT NULL,  --姓名
  GENDER VARCHAR2(4) NOT NULL,     --性别  
  AGE NUMBER(2) NOT NULL,           --年龄
  SEAT NUMBER(2) NOT NULL,          --座号
  ENROLLDATE DATE,                    --入学时间
  STUADDRESS VARCHAR2(50) DEFAULT '地址不详',  --住址
  CLASSNO VARCHAR2(4) NOT NULL                 --班号 班号=学期序号+班级序号  
)
/
ALTER TABLE INFOS ADD CONSTRAINT PK_INFOS PRIMARY KEY(STUID)
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_GENDER  
CHECK(GENDER = '男' OR GENDER = '女')
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT 
CHECK(SEAT >=0 AND SEAT <=50)
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_AGE  
CHECK(AGE >=0 AND AGE<=100)
/
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_CLASSNO  
CHECK((CLASSNO >='1001' AND CLASSNO<='1999') OR 
(CLASSNO >='2001' AND CLASSNO<='2999'))
/
ALTER TABLE INFOS ADD CONSTRAINT UN_STUNAME UNIQUE(STUNAME)
/

解析:

创建scores表(成绩表)
CREATE TABLE SCORES
(
     ID NUMBER ,                                 --ID  
     TERM VARCHAR2(2),					     --学期 S1或S2
	STUID VARCHAR2(7) NOT NULL,			--学号
	EXAMNO VARCHAR2(7) NOT NULL,			--考号 E+班号+序号	
	WRITTENSCORE NUMBER(4,1) NOT NULL,	--笔试成绩
	LABSCORE NUMBER(4,1) NOT NULL		     --机试成绩
)
/
ALTER TABLE SCORES 
	ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')
/
ALTER TABLE SCORES 
	ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID)  
/

解析:

创建 emp和dept表:

D:\Tool\cmder>sqlplus
SQL*Plus: Release 11.2.0.2.0 Production on 星期一 10月 18 20:26:17 2021
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
请输入用户名:  kaifamiao
输入口令:
连接到:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> CREATE TABLE DEPT(deptid int, deptname varchar2(20), deptaddr varchar2(13), datetime date);
表已创建。
SQL> ALTER TABLE DEPT ADD CONSTRAINT pk_deptid PRIMARY KEY(deptid);
表已更改。
SQL> CREATE TABLE EMP(empid int, deptid int, empname varchar2(20), job varchar2(20), manager int, entrydate date, salary float, bonus float);
表已创建。
SQL> ALTER TABLE EMP ADD CONSTRAINT pk_empid PRIMARY KEY(empid);
表已更改。
SQL> ALTER TABLE EMP ADD CONSTRAINT fk_deptid FOREIGN KEY(deptid) REFERENCES DEPT(deptid);
表已更改。
SQL>

CRUD操作

1、数据操纵语言(DML):用来操纵数据库中数据的命令。包括:select、insert、update、delete。 
2、数据定义语言(DDL):用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop。 
3、数据控制语言(DCL):用来控制数据库组件的存取许可、权限等的命令。包括:grant、deny、revoke。 
4、其他语言元素:如流程控制语言、内嵌函数、批处理语句等。
MySql和Oracle中几个Sql的差距
日期值
自增长
插入数据
INSERT INTO "INFOS" VALUES ('s100102', '林冲', '男', '22', '2', TO_DATE('2009-08-09 06:30:10', 'YYYY-MM-DD HH24:MI:SS'), '西安', '1001');
INSERT INTO "INFOS" VALUES ('s100104', '阮小二', '男', '26', '3', TO_DATE('2021-10-18 21:16:10', 'YYYY-MM-DD HH24:MI:SS'), '', '1001');

解析:

查询数据
SELECT STUNAME,GENDER,AGE,STUADDRESS 
FROM INFOS 
WHERE GENDER='男' ORDER BY AGE

尝试一下分页查询

SELECT * FROM 
( 
  select rownum as r ,t.* from dept t where rownum<=4
)
where r > 2
数据更新
SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山东莱芜' 
WHERE STUNAME='阮小二'; 
1 rows updated 
SQL> commit;
删除数据
SQL> DELETE FROM INFOS WHERE STUID='s100102'; 
1 ROW DELETED 
SQL> COMMIT;

除了Delete语句删除数据外,truncate语句也可以删除语句

truncate table infos;

TRUNCATE命令可以把表中的所有数据一次性全部删除。

TRUNCATEDELETE都能把表中的数据全部删除,他们的区别是:

尝试一下分页查询

SELECT * FROM 
( 
  select rownum as r ,t.* from dept t where rownum<=4
)
where r > 2
数据更新
SQL> UPDATE INFOS SET CLASSNO='1002',STUADDRESS='山东莱芜' 
WHERE STUNAME='阮小二'; 
1 rows updated 
SQL> commit;
删除数据
SQL> DELETE FROM INFOS WHERE STUID='s100102'; 
1 ROW DELETED 
SQL> COMMIT;

除了Delete语句删除数据外,truncate语句也可以删除语句

truncate table infos;

TRUNCATE命令可以把表中的所有数据一次性全部删除。

TRUNCATEDELETE都能把表中的数据全部删除,他们的区别是:

标签:--,数据库,用户,XE,SQL,Oracle,权限
来源: https://blog.csdn.net/qq_43636709/article/details/120873673