1. 对于存放数据的表空间,有两种管理方式:字典管理、本地管理,推荐使用本地管理方式。
2. 创建数据库用户时,Resource权限使得用户可以创建数据库对象,否则该用户创建任何数据库
对象时都会报错:ORA-01031。
3. 对于主外键,主键删除时有三种选择:
(1)如果有引用它的外键记录存在,不允许删除,这是默认情况(不指定ON DELETE子句就是
这种情况)。
(2)如果有引用它的外键记录存在,删除主表记录及相应的从表记录:ON DELETE CASCADE。
(3)如果有引用它的外键记录存在,删除主表记录,设置表外键值为空:ON DELETE SET NULL
4. 创建表的时候,对于主键和唯一约束,ORACLE会自动创建一个索引,索引名字由系统自动生成。
5. 索引段空间不会被重用,因此,索引的键值经过多次的insert,update,delete之后,空间利用效率会变
低,以下代码用于检查一个索引的空间利用率:
ANALYZE INDEX idx_name VALIDATE STRUCTURE;
SELECT name,del_lf_rows,lf_rows,
round((del_lf_rows/(lf_rows+0.0000000001))*100) "Freg Percent" FROM index_stats;
如果索引的叶子行的碎片超过10%,考虑对索引进行重建:
ALTER INDEX idx_name REBUILD;
Notes:index_stats只存放最后一次analyze index ... validate structure的结果。
6. 视图所引用的基本发生变化时,视图会变得无效,此时需要修改或重新编译视图:
ALTER VIEW view_name COMPILE;
视图又称为虚表,它并不实际存储数据,因此它能帮助提高查询速度,在生成报表时依赖于视图
并不是明智的选择,它能做的只是构造一些固定的查询,使复杂的查询语句看起来清晰一些。
视图最主要的用途是用来限制用户对数据的访问。
7. 同义词可以使得访问另一个用户的对象,就像访问自己的对象一样。
以下为创建一个同义词的语句:
-- 首先将相应的权限赋给另外一个用户
GRANT SELECT,UPDATE,DELETE,INSERT ON TABLE1 TO USER_B;
-- 创建同义词
CREATE SYNONYM TABLE1 FOR USER_A.TABLE1;
-- 现在USER_B访问USER_A.TABLE1可以用如下语句:
SELECT COUNT(*) FROM TABLE1;
创建以上同义词的前提是USER_B中没有与TABLE1同名的对象。
如果USER_A和USER_B位于不同的主机上,这时候还需要借助一个数据库链接,它是跨越不同数
据库服务器的桥梁。
-- 创建数据库链接
CREATE DATABASE LINK DBLINK_NAME CONNECT TO SERVICE_NAME USING USER_NAME
IDENTIFIED BY PASSWORD;
-- 创建同义词
CREATE SYNONYM TABLE1 FOR USER_A.TABLE1@DBLINK_NAME;
8. 触发器的代码不宜太长,整个触发器作为一个事务,不能在触发器中添加COMMIT或ROLLBACK
语句。
9. 数据迁移
1>. SQL SERVER与ORACLE之间的数据迁移:
将ORACLE数据服务建成一个ODBC数据源,在SQL SERVER服务器上针对这个数据源进行数据
导入导出。可能会有一些自动的数据转换过程,这个要注意观察一下。
2>. 将操作系统文件形式的数据导入ORACLE:
使用ORACLE自带的工具:sqlldr
sqlldr userid/password control=controlfile.ctl