谈谈Oracle基本操作(下)
Oracle事物
事物是保证数据一致性(正确性)的一种机制,由一组相关的DML语句组成,该组DML语句要么全部成功,要么全部失败.银行转账.DML:增删改
数据库内存和磁盘原理 :
硬盘是不错数据处理的,只是数据的存储,任何对硬盘中数据更改操作都是先载入到内存,然后对数据进行更改,然后把更改好的数据写回硬盘.硬盘只有两个操作读-写;在数据库频繁的增删改的操作中,容易引起磁盘碎片,降低效率,浪费空间,所以有的数据需要重整,所以,这里可以看出表头和数据是分离的,在数据库基本原理中,需要我们commit以后,我们在硬盘中的更改才会写入硬盘.默认是SQL语句一完成就立即提交.所以事务机制必须先关闭自动提交;
事物和锁:
在数据库基本原理中,需要我们commit以后,我们在硬盘中的更改才会写入硬盘.默认是SQL语句一完成就立即提交.所以事务机制必须先关闭自动提交;
事物的原理:
结合删除的回滚,保存点;
保证数据的一致性(面对客户),由dml语句组成的,就是增删改.队列+锁的机制;
commit执行后实际的顺序:加锁,建立回滚点,执行,确认,结束,删除保存点,释放;
提交以后,所有的保存点都会删除,没有后悔药了就,切记,rollbak就不再有用了;
如果不commit,会在exit退出是,全部自动commit
事物提交:
commit语句可以提交事务.当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁.全部结束后,别人才能看到数据的变化,别人也才可以操作
回滚事务/回退事务:
保存点:就是在数据操作的线性事务中,以某个时间点的数据为样本,保存下来.当我们的事务完整执行的时候,该保存点会被删除.当我们的事务语句没有执行完就中断的时候,我们就把数据恢复到这个保存点再删除这个点.执行rollback语句的时候;
事物列子:
1 savepoint sp1;
2 delete from emp where ename='SMITH';
3 savepoint sp2;
4 delete from emp where ename='SCOTT';
5 rollback to sp2;
6 rollback to sp1;
只读事物:
只允许运行进行查询操作,而不允许执行DML操作(增删改)的事务,使用只读事务可以确保用户只能取得某时间点的的数据.12306每天11点开始统计今天的销售情况,这时候就用只读事务.在设置了只读事务以后,尽管其他提交可能会引起数据新的变化,但是只读事务不会取得数据的最新变化,从而保证只取得特定时间点的信息;
数据库日常管理
数据库备份原理:只允许运行进行查询操作,而不允许执行DML操作(增删改)的事务,使用只读事务可以确保用户只能取得某时间点的的数据.
数据备份导出:
三种形式的导出备份:导出表,导出方案,导出数据库:
userid:用于指定导出操作的用户名,密码,链接 userid=c##scott/root@orcl
tables:用于指定要要导出的表
owner: 用于指定要导出的某个用户的方案
full=y: 用于指定要导出的数据库
inctype: 用于指定执行导出操作的增量类型
rows:用于指定导出过程中是否要导出表中的数据
file:用于指定导出的文件名
导出自己的表:exp userid=scott/tiger@orcl tables=(表1,表2,...)file=d:/emp_back.dmp;
导出别人的表(DBA权限/exp_full_database权限):导出别人的表(DBA权限/exp_full_database权限)
导出表结构:exp userid=scott/tiger@orcl tables=(表1,表2,...) file=d:/emp_back.dmp rows=n;
直接导出(快速导出):exp userid=scott/tiger@orcl tables=(表1,表2,...) file=d:/emp_back.dmp direct=y;
导出整个方案:导出方案是指:使用export导出一个方案或者多个方案中的(表,索引,约束)和数据,存放到文件中;导出自己的: exp c##scott/root@orcl owner=c##scott file=d:/scott.dmp
导出整个数据库:导出整个数据库,是指利用export导出所有数据库中的对象及数据(dba权限,exp_full_database权限);exp userid=system/root@orcl full=y inctype=complete file=d:\all.dmp
数据备份(导入):
使用工具import 将文件中的数据和对象导入到数据库,方案,表中.但是这个导入的必须是用export所导出的文件.与导出相似,导入也分为导入表,导入方案,导入数据库三种形式
有这些选项:
userid:用户名,密码,链接字符串
tables:指定要执行导入操作的表
fromuser:指定源用户
touser:用于指定目标用户
file:指定要导入的文件名
full=y:用于指定指定导入整个文件
inctype:用于指定执行导入操作的增量类型
rows:指定是否要导入表行(数据)
ignore:如果表存在,则只导入数据
导入表:
导入自己的备份到自己的表imp userid=c##scott/root@orcl tables=(emp) file=d:\emp_bak.dmp //如果是system用户,则要求该表没有主外键关系
导别人的备份到别人的表:dba/imp_full_database权限: imp userid=system/root@orcl tables=(emp) file=d:\emp.dmp touser=scott
把别人的备份导入到自己的表(结构一样):imp userid=system/root@orcl tables=(dept) file=d:\bak_dept.dmp
导入表结构,不导入数据:imp userid=c##scott/root@orcl tables=(emp) file=d:\bak_emp.dmp rows=n
导入数据:对象已经存在,则只可以导入表的数据 imp userid=scott/root@orcl tables=(emp) file=d:\bak_emp.dmp ignore=y
导入方案:
导入方案是指用import工具将文件中的对象和数据导入到一个或则多个方案中.导入其他方案需要dba权限,或者imp_full_database去杂念
导入自己的方案:imp userid=c##scott/root file=d:\***.dmp
导入其他方案: imp userid=system/root file=d:\xxx.dmp fromuser= system touser scott
数据库导入:imp userid=system/root full=y file=d:/orcl.dmp //相当于数据库迁移
数据字典:
1.数组字典原理:
基表:保存了数据库的基本信息,在硬盘中的静态数据
视图:是oracle在运行中,把基表中的数据载入内存,就可以直接查看
显示当前数据库全称:select * from global_name;
当前用户可以访问的所有数据字典视图:s*f dict where comments like '%grant%'
2.数据字典表管理:在sys方案的基表中:基本的静态数据,普通用户不能直接访问
动态性能视图:开启后的性能参数,是基于基表数据建立的视图,普通用户通过这个来看数据库信息,三种:user_xxx,all_xxx,dba_xxx
user_tables:当前用户拥有的表,它只返回用户对应方案的所有表 select table_name from user_tables;
all_tables:当前用户可以访问的表(不是数据库所有表) select table_name from all_tables;
dba_tables:显示所有方案所有的表(就是数据库的所有表) select table_name from dba_tables; ==DBA角色,或者select_any_table系统权限
3.数据字典_用户:
原理:grant授予;默认创建用户的时候,会默认创建角色,并且会把权限角色等存入到基表中(先找到对应的视图)
用户:dba_users;//查看所有用户的详细信息:select * from dba_users;desc dba_users;
角色系统权限: select * from dba_sys_privs where grantee="CONNECT"select * from role_sys_privs where role="DBA"
角色对象权限:select * from dba_tab_privs where grantee='角色名'
权限:dba_sys_privs//查看用户系统权限; s * from system_privilege_map order by name;
数据表空间:s tablespace_name from dba_tablespaces;
动态性能视图(即时生成动态情况)
动态性能视图记录当前数据库在内存(当前例程)的活动信息,当启动Oracle_server的时候,系统就会建立动态性能视图;当停止Oracle server的时候,系统会删除动态性能视图.Oracle的所有动态性能视图都以v_$开始,并且Oracle为每个动态性能视图都提供了响应的同义词,并且同义词是以V$开始的,所以v_$datafile的同义词为v$datafile;动态性能视图的所有者为sys,一般情况下,由dba或者特权用户来查询动态性能视图. 由于这个实际中用得很少,所以大家和我一起飘过.
管理表空间 和数据文件
基础:
表空间是数据库的逻辑组成部分.从物理上讲,数据库存放在数据文件中;从逻辑上讲,数据库是存放在表空间中,表空间由一个或是多个数据文件组成.所以一个表的数据被放在一个表空间,但是在多个不同的数据文件中;数据库的逻辑结构包括:表空间,段,区,和块-->数据库由表空间构成,表空间由段构成,段又由区构成,区又由oracle块构成的这样一种结构.可以提高数据库的效率;类似于广场上由瓷砖铺成的地图.哪个市,哪个县,哪个镇,哪个村;数据库里面可以有人以多个大于等于1个表空间,表空间可以达到以下效果:1 控制数据库占用的磁盘空间 2 dba可以将不同的数据类型部署到不同的位置,这样有利于提高I/O的性能,减少操作磁盘的次数.同时有利于备份和恢复等操作 表空间的增删改查:
增:建立表空间使用create tablespace命令来完成,需要注意的是,建立表空间需要特权用户或者是DBA角色来完成,如果是非这两个角色用户,则别的用户必须具有create tablespace的系统权限
删:drop tablespace sp001 including contents and datafiles;
改:select * from all_tables where tablespace_name='表空间名'//查询空间内的表
改变表空间的状态:
当表空间建立的时候,表空间处于联机的状态(online)状态,这时候表空间是可以访问的,此时改表空间可读可写,可以在表空间执行各种语句.但是在进行系统维护的时候或者数据维护的时候,可能需要改变表空间的状态.一般都是特权用户或者DBA来操作
使表空间脱机:alter tablespace sp001 offline;
使表空间联机:alter tablespace sp001 online;
只读表空间:alter tablespace sp001 read only;(insert,update,delete都不可用)
ORA-00372: file 13 cannot be modified at this time
ORA-01110: data file 13: 'D:\TABLESPACE\SP001.DBF'
让表空间可读写:alter tablespace sp001 read write;
扩展表空间:
表空间是由数据文件组成,表空间大小实际就是数据文件相加后的大小,加入,emp存放在data01的表空间上,初始大小是2m,当数据满了2m以后,再继续向emp表中插入数据,就会提示空间不足的错误
总结:
1 了解表空间和数据文件的作用
2 掌握常用表空间,ubdo表空间和临时表空间的建立方法
3 了解表空间的各个状态:(online,offline,read,write,readonly)的作用,以及如何改变表空间状态的方法
4 常见的数据备份和恢复,以及5步操作
数据的完整性
原理:
本质是数据合理性,符合逻辑规则本质就是对要存储到该数据表/列的数据的一些要求
约束(constraint):
就是表的设计;数据合理就不能放在数据表中
基础知识
not null (非空)某列表头如果定义了not,null的话,那么插入数据的时候,就会检查是否有数据,如果没有,就会报错
unique:(唯一,id)可为空某列表头定义了unique以后,插入是就会遍历表,看是否有重复
primary key:主键:定义主键以后,该列数据不能重复切不能为null
foreign key:外键:定义主表和从表之间的关系.外键约束要定义在从表上,主表的列必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或为null
check:用于强制要求数据必须满足的条件,假定在sal上定义了check约束,并要求sal值在1000-2000之间,不在的话,就报错
约束的增,删,改,查
增:alter table goods modify goodsName not null;
删:alter table 表名 drop constraint 约束名称;
查:查看表多有的约束:select constraint_name, constraint_type,status,validated from user_constraints where table_name='表名';
:查看约束列:select column_name,position from user_cons_columns where constraint_name='约束名';
JDBC(java程序操作数据库)
原理:
相关接口及其继承关系
基础操作六步骤:
1:加载驱动----Class.forName("oracle.jdbc.driver.OracleDriver");//反射机制
2:获取连接对象---Connectionct= DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","system","root");
3:连接---Statement sm=ct.createStatement();
4:传输数据,数据库处理,接收数据结果集:ResultSet rs = sm.executeQuery("SQL");
5:处理结果集
6:关闭资源(3个)---rs.close();sm.close();ct.close();
操作:
query
DML
procedure
事物