一、表空间

oracle使用表空间来管理数据库的对象(表,序列,过程,函数,游标等)。

oracle的逻辑结构(看不见的):oracle数据库 =》 表空间 =》 表 序列  过程等对象。

oracle的物理结构(能看见):oracle 数据库 =》oracle的数据文件=》数据段=》数据区间=》数据块 。

oracle的数据文件分三种:

1、控制文件,以ctl结尾,控制文件中存储oracle运行所需要的字典,用户等对象。

2、日志文件,以log存储oracle操作产生的日志文件,还包含oracle的重做日志。

3、数据文件,存储用户或者系统创建的对象

表空间也是对象,需要存储到数据文件中,所以创建表空间的时候需要指定使用哪个数据文件。

创建表空间的语法:

create tablespace 表空间名称

datafile '存储的位置\文件名.dbf'  指定表空间使用的数据文件,如果文件不存在会自动创建

size 50m 表空间的初始大小

autoextend on next 30m 表空间如果空间不够用了,下次自动扩展的大小

maxsize  300m指定表空间的最大存储空间;

例子:

 -- 创建表空间
create tablespace tab_test01
--指定使用的数据文件
datafile 'D:\test_tab\test01.dbf'
--指定表空间的初始大小
size 50m
--当表空间不够用时,下次自动增长的大autoextend on next 30m
--表空间自动增长的最大值
maxsize 300m;
 -- 创建表空间
create tablespace tab_test02
--指定使用的数据文件
datafile 'D:\test_tab\test02.dbf'
--指定表空间的初始大小
size 50m;

表空间用到的物理文件,不要在磁盘上直接删除,否则数据库将不能正常启动,如果要删除数据文件,需要先删除表空间:

 drop tablespace tab_test02;

oracle中有内置的默认的表空间:

1、TEMP01.DBF 临时表空间,存储oracle数据库运行产生的临时数据

2、UNDOTBS01.DNF重做表空间,存储数据库产生的重做文件。

3、USERS01.DBF用户表空间,存储默认用户的数据。当创建用户且用户不指定默认表空间的时候会使用该表空间。

二、用户管理

oracle中有三个重要用户 sys  system  scott,我们也可以自己创建用户

创建用户的命令:

 create user 用户名 identified by 用户密码 default  tablespace 表空间名称;

注意:创建用户的时候可以不指定默认表空间,如果不指定会使用系统的USERS的表空间

例子:

 --创建用户 并指定使用tab_test01表空create user zhangsan identified by 123456
default tablespace tab_test01;
-- 创建用户,不指定默认表空间
create user lisi identified by 123456;

删除用户:

 -- 指定cascade代表把用户和用户下的对象都一起删除。
drop user 用户名 [cascade];

修改用户密码:

 alter user zhangsan  identified  by 123456;

connect连接数据库的角色,可以执行数据库的增删改查,但是不能执行数据库表的增删改,一般在开发环境中给用户赋予这种角色

resource开发者角色,可以执行数据库对象的增删改查,我们一般在开发中使用这种角色。

dba 数据库管理员角色,最高权限,可以执行数据库的任何操作,一般不建议使用这种角色。

给用户赋予角色可以使用如下语句:

grant 角色名1,角色名2... to 用户;

例子:

 --为张三用户赋予连接的权限
grant connect to zhangsan;
--为张三赋予开发权限
grant resource to zhangsan;
--为张三同时赋予连接和开发权grant connect ,resource to zhangsan;

撤销权限可以使用以下语句:

 --撤销张三的开发权限
revoke resource from zhangsan;

三、游标

1、游标的概念:游标是数据库中可以操作的一块内存区,可以方便的帮我们从数据库中获取数据,一般使用游标来遍历数据。

使用游标的语法:

 declare
-- 声明游标变量
cursor 游标变量名称 is sql语句;
begin
-- 打开游标
open 游标变量名称;
loop
-- 从游标中获取数据
fetch 游标变量名称 into rowtype 类型变量/record类型变量;
-- 判断是否从游标中获取到了数据,如果没有获取到数据,应该跳出循环
if 游标变量%农田found then
exit;
end if;
语句块;
end loop;
--关闭游标
close 游标变量名称;
end;

例子:输出部门表的所有数据

 --输出部门表的所有数据
declare
--声明游标变量
cursor cur_dept is select * from dept;
--声明行类型变量,用来接收游标获取到的数据
v_dept dept%rowtype;begin
--打开游标
open cur_dept;
loop
--从游标中获取数据
fetch cur_dept into v_dept;
-- 判断是否从游标中获取到了数据,如果没有获取数据跳出循环
--if cur_dept%notfound then
-- exit;
--end if;
--if 可以简写成如下形成
exit when cur_dept%notfound;
--打印数据
dbms_output.put_line('第'||cur_dept%rowcount||'行,部门编号:'||v_dept.deptno||',部门名称:'||v_dept.dname);
end loop;
--关闭游标
close cur_dept;
end;

可以使用游标名称%属性名称 来访问游标的属性 ,游标常用的有四个属性:

属性值

说明

isopen 判断游标是否已经打开
found 判断游标是否取到了数据,如果获取到了数据返回真,否则返回假
notfound 判断游标是否获取到了数据,如果获取到了数据返回假,否则返回真
rowcount 返回当前游标获取到的数据的行号

2、游标可以分为显示游标和隐含游标两种类型

显示游标

使用游标的时候可以给游标定义参数,这样游标就可以传不同的参数多次使用了

举例:写一个游标,根据部门编号,打印该部门下员工的信息

 declare
--声明游标变量 ,加入参数
cursor cur_emp(v_deptno number) is select * from emp where deptno=v_deptno;
v_emp emp%rowtype;
begin
--打印部门编号为10的员工的信息
--打开游标
open cur_emp(10);
loopfetch cur_emp into v_emp;
exit when cur_emp%notfound;
dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename);
end loop;
--关闭游标
close cur_emp;
dbms_output.put_line('======');
--打印部门编号为20的员工的信息
--打开游标
open cur_emp(20);
loop
fetch cur_emp into v_emp;
exit when cur_emp%notfound;
dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename);
end loop;
--关闭游标
close cur_emp;
end;

我们也可以一次性取出游标的所有数据,放入到table类型变量中:

 declare
--声明游标变量 ,加入参数
cursor cur_emp(v_deptno number) is select * from emp where deptno=v_deptno;
--声明table类型
type emp_table_type is table of emp%rowtype
index by binary_integer;
-- 声明table类型变量
v_emp emp_table_type;
begin
--打印部门编号为10的员工的信息
--打开游标
open cur_emp(10);
--一次性取出游标中的所有数据 ,放入table类型变量中
fetch cur_emp bulk collect into v_emp--关闭游标
close cur_emp;
--循环输出table类型变量中的内容
for v_i in v_emp.first .. v_emp.lasloop
dbms_output.put_line('员工编号:'||v_emp(v_i).empno||',员工姓名:'||v_emp(v_i).ename);
end loop;
end;

游标for循环

每次使用游标都需要打开和关闭游标,比较麻烦,我们可以使用游标for循环来简化游标的使用方式。

例子:打印部门表所有的内容

 declare
-- 声明游标变量
cursor cur_dept is select * from dept;
begin
-- 使用游标for循环不需要显式的打开或者关闭游标
-- 循环变量也不需要显式声明,该游标变量是行类型rowtype类型或者记录类型record
for v_dept in cur_dept
loop
dbms_output.put_line('部门编号:'||v_dept.deptno||',部门名称:'||v_dept.dname);
end loop;
end;

游标for循环可以继续简写:

 begin
-- 游标for循环简写
for v_dept in (select * from dept)
loop
dbms_output.put_line('部门编号:'||v_dept.deptno||',部门名称:'||v_dept.dname);
end loop;
end;

注意:in后面一定加上小括号

游标变量类型

以前的游标没有办法从不同的表中取数据,在大项目中,有可能需要声明很多游标变量,非常繁琐,我们可以使用游标变量类型来解决这个问题

例子:声明游标变量类型,先从打印员工表数据,再打印部门表数据。

 declare
--声明游标变量类型
type cur_test_type is ref cursor;
-- 声明cur_test_type类型的游标变量
cur_test cur_test_type;
v_emp emp%rowtype;
v_dept dept%rowtype;
begin
-- 先打印员工表所有数据
--打开游标,同时告诉该从哪个表取数据
open cur_test for select * from emp;
loop
fetch cur_test into v_emp;exit when cur_test%notfound;
dbms_output.put_line('员工编号:'||v_emp.empno||',员工姓名:'||v_emp.ename);
end loop;
--关闭游标
close cur_test;
--再使用cur_test游标变量从部门表取数据
open cur_test for select * from dept;
loop
fetch cur_test into v_dept;
exit when cur_test%notfound;
dbms_output.put_line('部门编号:'||v_dept.deptno||',员工姓名:'||v_dept.dname);
end loop;
--关闭游标
close cur_test;
end;

隐含游标

oracle中也有隐含游标,在所有增删改语句执行之后,数据库会默认我们创建一个隐含游标,名字叫sql,我们可以访问隐含游标的属性,隐含游标不需要打开或者 关闭。

例子:删除员工,如果员工编号不存在,打印错误信息

 begin
delete from emp where empno=9999;
--通过隐含游标判断是否删除成功
if sql%found then
dbms_output.put_line('删除成功');
else
dbms_output.put_line('删除失败');
end if;
end;

四、面试题

1、oracle中有几种内置角色

connect  resource dba

2、游标的四个属性是什么

isopen  found  notfound  rowcount

oracle中表空间管理,游标的更多相关文章

  1. Oracle表空间管理

    oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;              //修改表空间数据文件类型 2.ALT ...

  2. ORACLE表空间管理维护

    1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...

  3. ORACLE表空间管理方式segment和extent

    A permanent tablespace contains persistent schema objects. Objects in permanent tablespaces are stor ...

  4. ORACLE 临时表空间管理

     临时表空间和临时段 临时表空间用于存放排序.临时表等数据,其信息不需要REDO,因此临时表的DML操作往往比普通表产生的REDO少很多.临时表数据变化不产生REDO,UNDO数据变化产生REDO.临 ...

  5. oracle 表空间管理

    1.创建表空间 03:01:55 sys@ORADB11G> create tablespace TSPITR datafile '/u01/app/oracle/oradata/TSPITR0 ...

  6. ArcSDE for Oracle表空间管理——暂时(TEMP)表空间

    Oracle暂时表空间主要用来做查询和存放一些缓冲区数据.暂时表空间消耗的主要原因是须要对查询的中间结果进行排序. 重新启动数据库能够释放暂时表空间,假设不能重新启动实例,而一直保持问题sql语句的运 ...

  7. oracle中表空间的相关操作

    Oracle 创建表空间 注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执行 2.确保路径存在,比如[E:\app\Quentin\oradata\orcl] ...

  8. oracle 表空间管理相关(原创)

    通过以下几步基本可以查看表空间情况以及处理表空间不足问题. ASM相关 查看asm空间 select group_number,name,total_mb,free_mb from v$asm_dis ...

  9. Oracle表空间管理相关

    以下以我自己的测试环境举例: 1.表空间的 block_size 为 8192字节,即8KBytes.从数据字典中查到 max_size 为 2147483645,即约为15.9TBytes. 2.在 ...

随机推荐

  1. textarea 是否换行的问题解决

    需求:判断当前textarea是否已经换行(这个换行有2种方式:1.不断输入文字直到超过指定宽度后自动换行:2.按了回车以后进行换行) 单纯的解决第二种换行很简单.网上提供了很多常规的解决方案. De ...

  2. webgrind安装使用详细说明

    webgrind是一个网页版的性能分析工具,它的主要作用就是分析xdebug生成的cachegrind文件,以一种界面友好详尽的方式来展示性能数据.试用了一下感觉还是很不错的,鉴于网上并没有一个系统介 ...

  3. 使用face_recognition进行人脸特征检测

    效果图调用face_recognition.face_landmarks()方法即可得到人脸特征点, 返回一个字典, 下图是返回的数据, 包括chin(下巴), left_eye(左眼)等.我画了两种 ...

  4. MySQL树形结构的数据库表设计和查询

    1.邻接表(Adjacency List) 实例:现在有一个要存储一下公司的人员结构,大致层次结构如下: 那么怎么存储这个结构?并且要获取以下信息: 1.查询小天的直接上司. 2.查询老宋管理下的直属 ...

  5. 从Instagram“宁静、规则”的成功 看国内APP发展之路

    看国内APP发展之路" title="从Instagram"宁静.规则"的成功 看国内APP发展之路"> Instagram在全球获得的巨大成功 ...

  6. 爬虫cookies详解

    cookies简介 cookie是什么? Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).定义于 ...

  7. 理解 Java 内存模型的因果性约束

    目录 理解 Java 内存模型的因果性约束 欢迎讨论 规范理解 例子练习 例子1 例子2 总结 理解 Java 内存模型的因果性约束 欢迎讨论 欢迎加入技术交流群186233599讨论交流,也欢迎关注 ...

  8. Python——13定制类

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  9. C++走向远洋——68(十六周、文件)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  10. C++扬帆远航——10(求π)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:π.cpp * 作者:常轩 * 微信公众号:Worldhello ...