天使羊波波闪耀光芒 软件及互联网爱好者

226月/150

工作体会2

分析系统的方法:
1、功能点
2、信息流、数据流
3、系统边界

做事有把握!

285月/150

oracle数据库对象-同义词

同义词(synonym)是数据库对象,相当于给表起一个别名。

通过创建同义词可以简化对象的访问,使用同义词可以:
1)更方便的引用其他用户拥有的表
2)缩短冗长的对象名

例子:

SQL> select object_name, object_type, owner from dba_objects where object_name='DUAL';

OBJECT_NAME   OBJECT_TYPE   OWNER
------------- ------------- -------------
DUAL          TABLE         SYS
DUAL          SYNONYM       PUBLIC


从例子中看到SYS用户有DUAL表,为了让其它用户能引用DUAL表,建立了一个公共的同义词。

1、创建同义词

CREATE [PUBLIC] SYNONYM synonym_name FOR object_name;

2、删除同义词

DROP SYNONYM synonym_name;

3、查看所有同义词

select * from dba_synonyms;

4、权限
CREATE SYNONYM权限:创建自己私有同义词
CREATE ANY SYNONYM权限:创建其它用户的私有同义词
CREATE PUBLIC SYNONYM权限:创建自己公有同义词

285月/150

oracle数据库对象-序列

序列(sequence)是oracle数据库对象中的一个,每次使用时它会自动增加(或减少)。

1、创建序列
语法:

CREATE SEQUENCE sequence_name
  [INCREMENT BY n]
  [START WITH n]
  [{MAXVALUE n | NOMAXVALUE}] 10^27
  [{MINVALUE n | NOMINVALUE}] -10^27
  [{CYCLE | NOCYCLE }]
  [{CACHE n | NOCACHE}];


说明:
INCREMENT BY:每次加几个
START WITH:从几开始
MAXVALUE:最大值是多少,或NOMAXVALUE不设置最大值
MINVALUE:最小值是多少,或NOMINVALUE不设置最小值
CYCLE:累加到最大值之后循环,或NOCYCLE一直累加不循环
CACHE:设置内存里缓存多少个序列,如果系统down掉了内存中的序列会丢失,导致序列跳号,也可以设置为NOCACHE不缓存

创建语句:

create sequence seq1
increment by 1
start with 1
maxvalue 999999
minvalue 1
cycle
nocache;

这个序列的值从1到999999递增循环。

175月/150

ultraedit问题

ultraedit打开一个文档a里面中文乱码,但是记事本打开a中文正常。文档a是从ftp上拉下来的。

如果把a文档用记事本打开另存为UTF-8格式的b文档,用UE打开又可以显示中文。

如果把转换为UTF-8格式的b文档,UE另存为UTF8无BOM格式的c文档,c文档和a文档所占字节数是一样的,查看16进制也是一样的。UE打开c文档正常显示。

只是UE打开a文档右下角是DOS,c文档右下角是U8-DOS。

不知道为什么UE没有识别出a文档的UTF8格式?

只要用记事本另存为一下就好了。。。

294月/150

4月29日

  最近一段时间一直在写(其实是摘抄的笔记)oracle的文章,不能说精通,收获还是有的。基本可以告一段落了。花了两个月的时间。

294月/150

oracle数据类型简述

oracle提供了22种不同的数据类型。

一、数据类型

1、char
char是一个定长字符串,会用空格填充来达到其最大长度。如果该列没有插入数据为null,插入数据没有到定义的长度,用空格填充。

2、nchar
这是一个包含unicode格式数据的定长字符串。

3、varchar2
目前这也是varchar的同义词。这是一个变长字符串,与char类型不同,它不会用空格填充至最大长度。

4、nvarchar2
这是一个包含unicode格式数据的变长字符串。

5、raw
这是一种变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。可以把它看作由数据库存储的信息的二进制字节串。

使用类似于char,存储的是char的二进制值。(我没用过)

284月/150

oracle数据库对象-索引

一、索引的概念

索引类似于查字典,通过拼音、笔画,只要几步就能查到所要的字。数据库里,通过索引,只要少量的读,就能找到所需的记录。

使用索引需要找到一个平衡点,索引太多会影响DML语句的速度,因为要写索引表。索引太少又不能提高查询速度。

二、B*树索引


1、B*树索引:我们所说的“传统”的索引。create index 创建的索引默认是B*索引。

B*数索引类似于一颗二叉树,但并不是二叉树。B*树中的“B”不代表二叉(binary),而代表平衡(balanced)。

B*树的特点之一是:所有叶子块都应该在树的同一层上。

这一层也称为索引的高度(height),这说明所有从索引的根块到叶子块的遍历都会访问同样数目的块。也就是说,对于形如“SELECT INDEXED_COL FROM T WHERE INDEXED_COL = :X”的索引,要到达叶子块来获取第一行,不论使用的:X值是什么,都会执行同样数目的I/O。

换句话说,索引是高度平衡的(height balanced)。大多数B*树索引的高度都是2或者3,即使索引中有数百万行记录也是如此。这说明,一般来讲,在索引中找到一个键只需要执行2或3次I/O。

274月/152

oracle数据库对象-表的分类

oracle中的一个表最多可以有1000列。

oracle中有9种类型的表:

1、堆组织表(heap organized table)
就是“普通”的标准数据库表。数据以堆的方式管理。堆组织表中记录是无序的,不以某种特定顺序来放置。

2、索引组织表(index organized table)
索引组织表的数据都存储在与其关联的索引中,对表的添加、更新、删除,只会导致索引的更新。查询时必须根据索引去查询数据。

索引组织表必须设定主键。

create table indextable (
id varchar2(10),
name varchar2(20),
constraint pk_idx primary key (id)
)
organization index;

insert into indextable values ('1', '1');
insert into indextable values ('2', '2');

对索引组织表查询:

select * from indextable where id = '2';
select * from indextable where name = '2';

第一个查询的是主键,执行计划走的是INDEX UNIQUE SCAN。第二个查询的非索引字段,执行计划走的是INDEX FAST FULL SCAN。说明索引组织表的数据是跟在索引后面的,执行计划会自动根据索引来查询。

254月/150

oracle redo和undo简述

一、redo

重做日志文件(redo log file)是数据库的事务日志。oracle有在线重做日志和归档重做日志。

重做日志文件都用于恢复,万一实例失败或介质失败,它们就能恢复数据库到这个“意外”发生前的时间点。

二、undo

undo用于取消一条语句或一组语句的作用。

undo在数据库内部存储在一组特殊的段中,这称为undo段(undo segment)。“回滚段”(rollback segment)和“undo 段”(undo segment)一般认为是同义词。

undo操作数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可能大不相同。

oracle回滚时,它实际上会做与先前逻辑上相反的工作。对于每个insert,oracle会完成一个delete。对于每个delete,oracle会执行一个insert。对于每个update,oracle则会执行一个“反update”,或者执行另一个update将修改前的行放回去。

224月/150

oracle事务简述

一、事务的概念

事务会把数据库从一种一致状态转变为另一种一致状态,这就是事务的任务。

oracle的事务提供了ACID特征:

原子性(atomicity):事务中的所有动作要么都发生,要么都不发生。

一致性(consistency):事务将数据库从一种一致状态转变为下一种一致状态。

隔离性(isolation):一个事务的影响在该事务提交前对其他事务都不可见。

持久性(durability):事务一旦提交,其结果就是永久性的。

其中最重要的特性是它的原子性。

二、事务控制语句

一定要显式地使用commit或rollback来终止你的事务。

commit:要想使用这个语句的最简形式,只需发出commit。也可以更详细一些,写为commit work,不过这二者是等价的。commit会结束你的事务,并使得已做的所有修改成为永久性的(持久保存)。commit语句还有一些扩展用于分布式事务中。利用这些扩展,允许增加一些有意义的注释为commit加标签(对事务加标签),以及强调提交一个可疑的分布式事务。

rollback:要想使用这个语句的最简形式,只需发出rollback。同样地,你也可以罗嗦一些,写为rollback work,但是二者是等价的。回滚会结束你的事务,并撤销正在进行的所有未提交的修改。为此要读取存储在回滚段/undo段中的信息,并把数据库块恢复到事务开始之前的状态(后面我将把回滚段/undo段统称为undo段,Oracle 10g中都喜欢用这个词)。

savepoint:savepoint允许你在事务中创建一个“标记点”(marked point),一个事务中可以有多个savepoint。

rollback to :这个语句与savepoint命令一起使用。可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。所以,可以发出两条update语句,后面跟一个savepoint,然后又是两条delete语句。如果执行delete语句期间出现了某种异常情况,而且你捕获到这个异常,并发出rollback to savepoint命令,事务就会回滚到指定的savepoint,撤销delete完成的所有工作,而update语句完成的工作不受影响。

set transaction:这条语句允许你设置不同的事务属性,如事务的隔离级别以及事务是只读的还是可读写的。使用手动undo管理时,还可以使用这个来指示事务使用某个特定的undo段,不过不推荐这种做法。

最常用的控制语句就是commit和rollback。savepoint语句的用途有点特殊。oracle在内部频繁地使用了这个语句,你会发现这语句在你的应用中可能也有用。