Oracle 学习笔记(一)

与其它数据库比较

小型数据库:Access、FoxBASE

中型数据库:MySQL、SQL Server、INFORMIX

大型数据库:Sybase、Oracle、DB2(负载:Sybase < Oracle < DB2)

使用哪种数据库考虑因素:

  • 负载

  • 成本

  • 安全性

安装

安装过程不描述,网上有教程。

Oracle 安装会自动的生成 sys 用户和 system 用户:  

  1. sys 用户是超级用户,具有最高权限,具有 sysdba 角色,有 create database的权限,该用户默认的密码是 change_on_install ;

  2. system 用户是管理操作员,权限也很大。具有 sysoper 角色,没有 create database 的权限,默认的密码是 manager ;

  3. 一般而言,对数据库维护使用 system 用户登录就可以了。

这两个用户最大的区别在于有没有 create database 权限。

Oracle的基本使用——基本命令

sql * plus 的常用命令 :

连接命令 

1. conn[ect] 

用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]

当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper。 

2. disc[onnect] 

说明: 该命令用来断开与当前数据库的连接 。

3. passw[ord] 

说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用 sys/system 登录。 

4. show user 

说明: 显示当前用户名 

5. exit 

说明: 该命令会断开与数据库的连接,同时会退出 sql * plus 

文件操作命令 

1. start 和 @ 

说明: 运行 sql 脚本 

案例: sql>@ d:a.sql 或是 sql>start d:a.sql  

2. edit 

说明: 该命令可以编辑指定的sql脚本 

案例: sql>edit d:a.sql,这样会把 d:a.sql 这个文件打开 

3. spool  

说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。 

案例: sql>spool d:.sql 并输入 sql>spool off 

交互式命令 

1. &  

说明:可以替代变量,而该变量在执行时,需要用户输入。 

select * from emp where job='&job'; 

2. edit 

说明:该命令可以编辑指定的 sql 脚本 

案例:SQL>edit d:a.sql 

3. spool 

说明:该命令可以将 sql * plus 屏幕上的内容输出到指定文件中去。 

spool d:.sql 并输入 spool off 

显示和设置环境变量 

概述:可以用来控制输出的各种格式,set show 如果希望永久的保存相关的设置,可以去修改 glogin.sql 脚本 

1. linesize 

说明:设置显示行的宽度,默认是80个字符 

show linesize 

set linesize 90 

2. pagesize 说明:设置每页显示的行数目,默认是14,用法和 linesize 一样,其它环境参数的使用也是大同小异。

oracle用户管理

oracle 用户的管理 

用户名scott,密码默认 tiger,默认状态是被锁定, DBA 用户执行

alter user scott account unlock; 可以解锁登陆;

scott 是个演示用户,学习用的;

创建用户  

概述:在 oracle中 要创建一个新的用户使用 create user 语句,一般是具有 dba (数据库管理员)的权限才能使用。 

create user 用户名 identified by 密码; 

(oracle密码必须以字母开头,否则不会创建用户) 

给用户修改密码 

概述:如果给自己修改密码可以直接使用 

password 用户名 

如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限 

SQL> alter user 用户名 identified by 新密码 

删除用户 

概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。 

比如 drop user 用户名 【cascade】 

在删除用户时,注意: 如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade; 

用户管理的综合案例 

概述:创建的新用户是没有任何权限的,甚至连登陆的数据库的权限都没有,需要为其指定相应的权限。

给一个用户赋权限使用命令 grant,回收权限使用命令 revoke。 

举例:

SQL>conn stephen/stephen123; 

ERROR: 

ORA-01045: user STEPHEN lacks CREATE SESSION privilege; 

logon denied 

警告: 您不再连接到 ORACLE。 

SQL> show user; 

USER 为 "" 

SQL> conn system/p; 

已连接。 

SQL> grant connect to stephen; 

授权成功。 

SQL> conn stephen/stephen123; 

已连接。 

注意:grant connect to stephen  准确的讲,connect不是权限,而是角色。 

对象权限

现在要做这么件事情: 

* 希望 stephen 用户可以去查询 emp 表 

* 希望 stephen 用户可以去查询 scott 的 emp 表  

  grant select on scott.emp to stephen

* 希望 stephen 用户可以去修改 scott 的 emp 表 

  grant update on scott.emp to stephen

* 希望 stephen 用户可以去修改、删除、查询、添加 scott 的 emp 表 

  grant all on scott.emp to stephen 

* scott希望收回 stephen 对 emp 表的查询权限 

  revoke select on emp from stephen

权限的维护 

* 希望 stephen 用户可以去查询 scott 的 emp 表,还希望 stephen 可以把这个权限继续给别人。 

--如果是对象权限,就加入 with grant option 

grant select on emp to stephen with grant option 

操作过程: 

SQL> conn scott/tiger; 

已连接。 

SQL> grant select on scott.emp to stephen with grant option; 

授权成功。 

SQL> conn system/p; 

已连接。 

SQL> create user bobi identified by bobi123; 

用户已创建。 

SQL> grant connect to bobi; 

授权成功。 

SQL> conn stephen/stephen123; 

已连接。 

SQL> grant select on scott.emp to bobi; 

授权成功。 

--如果是系统权限。 

system 给 stephen 权限时: 

grant connect to stephen with admin option;

如果 scott 把 stephen 对 emp 表的查询权限回收,那么 bobi 会怎样? 被回收。 

操作过程: 

SQL> conn scott/tiger; 

已连接。 

SQL> revoke select on emp from stephen; 

撤销成功。 

SQL> conn bobi/bobi123; 

已连接。 

SQL> select * from scott.emp; 

select * from scott.emp 

第 1 行出现错误: 

ORA-00942: 表或视图不存在 

结果显示:bobi 受到牵连。

今天就复习到这,后续更新。

【微信公众号:Stephen】一个毕业三年后自学 Java 入行的程序员。
原文地址:https://www.cnblogs.com/stephen-java/p/10706346.html