有道云笔记 连接:
http://note.youdao.com/noteshare?id=3517a1795a730d3e6bc0dd3072622e16
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下可忽略:
《笔记oracle_2》
#韩顺平讲得太墨迹,先跳过oracle表查询
注意,JDBC_ODBC桥需要到“控制面板-管理-ODBC数据源”里配置。
《笔记oracle_3》
对于oracle分页查询,最基础(不排序,不优化)的语句是:
SELECT*FROM(SELECTa.*,ROWNUMrnFROM(SELECT*FROMemp)a)WHEREROWNUM=21;
使用了三层嵌套子查询和关键字ROWNUM。
2.oracle事务管理
oracle事物跟java里的synchonized块差不多。
注意,保存点回滚的前提是没有commit;否则没有办法。
注意,不手动commit,而exit对话框,会默认commit。所以,设置保存点后既不能commit也不能exit对话框。
rollback不加参数,表示回退所有操作。
Hibernate会强制dml使用事物(transact)。
eg:publicvoidinsertDAO{
Connectioncnn=null;
try{
Class.forName(“oracle.jdbc.driver.OracleDriver”);
cnn=DriverManager.getConnection(
“jdbc:oracle:thin:@127.0.0.1:1521:xe”,
“username”,“password”);
cnn.setAutoCommit(false);//1.设定自动提交为false
Statementsm=cnn.createStatement();
sm.excecuteUpdate(“UPDATEempSETSAL=SAL-1WHEREENAME=’SCOTT’”);
intk=9/0;
sm.excecuteUpdate(“UPDATEempSETSAL=SAL+1WHEREENAME=’SMITH’”);
cnn.commit();//2.手动cimmit
sm.close();
cnn.close();
}catch(Exceptione){
try{
cnn.rollback();//3.如果异常就rollback
}catch(Excrptionep){
ep.printStackTrace();
}
e.printStackTrace();
}
}
只读事物使管理员能够在某一时间点准确统计信息。如,上例,管理员想在18:00的时候统计机票信息;他设置了一个只读事物,然后开始写统计的sql;这期间,一定会有其他的客户想数据库中增删改,而这些操作对管理员的统计是没有影响的。只读事物在高并发系统,对管理员日常工作是很重要的。
3.oracle函数
注意,数据量大时,四舍五入的方式对统计的结果是比较大的。
例如,dms系统会把每个LogRec的sysdate存到数据库中;当读这些数据时,oracle默认是没有时分秒的;就需要手工转换。
再例如,某机票系统,需要查过去一小时有多少数据添加进去了。
NUMBER(7,2):共7位数,但是小数点后有2位(整数5位)。
在创建用户时,oracle会自动创建跟该用户同名的方案;oracle是靠方案管理数据对象的。
- oracle数据库管理
4和5是高级dba的工作;备份和恢复是普通dba的主要工作。
调优:化腐朽为神奇;技术含量比较高。
注意,dba是越老越吃香的。
sys登陆必须加上assysdba或assysoper;
system登陆可以不加as,但是这时某人是sysdba的;即把assysdba省略了。
可以注意到,system正常登陆就拥有了sysdba权限,能完成所有操作。
总结:从在oracle的地位看,sys用户的方案里存了oracle的核心数据对象;system用户则没有,也不能操作sys里的这些数据;
从权限上看,system和sys都有sysdba的角色,即都有最高的权限。
导出方案:把某用户所有的东西都导出去了;
注意,直接导出方式,在数据量大时,很实用。
数据字典:系统的静态信息;
动态性能试图:系统的动态信息;
注意,数据字典能完成许多实用的查询!
以上功能也很实用。
还可以查oracle所有系统权限(140多)、对象权限(也很多)。
表空间:把一些数据文件统一起来起个名字,就是表空间。当我们在说某表在哪?的时候,不会说它在某个具体数据文件中,而是说在某表空间中。eg:人们形容某人的位置时,不会说他的经纬度,而是说他在北京。
- 约束
索引:在海量数据时是优化oracle速度的关键。其次才是其他因素。
注意,oracle的主键不能由2个以上的列作为联合主键。
除了按需求写约束,还应当注意的是,id一般都是char,比varchar查询速度快;价格一般是number(*,2)。
性别,一般是char(2),两个字节;身份证号,char(18)。
注意,增加的约束是需要起名字的,但一般名字不重要。
删primarykey的时候,如果删的主键列,是另外一个表某一列的外键,那么不加cascade是一定会报错的。
一般,表级定义适合简便地写小表;列级定义适合复杂的大表,并能比较好得管理约束名。
注意,索引是人类智慧的产物,能在查找时大大减少时间;但是,建了索引就意味需要专门去维护、更新索引,额外的开销。
上例,如果经常按姓名去查询customer表,那么就可按customer(name)建个索引;数据量大时,会加快这种查询的速度。这个索引的内部实现机制是有oracle自动完成的。
注意,符合索引时,尽量把主要索引列放在后面;因为oracle扫描sql语句是从右往左扫的。
如果一个表只有三四十条,那建个索引反而会增加开销。
索引,一般只了解单列索引和符合索引即可。
这种查所有索引、约束,用sqlDeveloper等工具比手工查询方便得多。