ITPub博客

首页 > 数据库 > Oracle > [转]oracle 学习笔记

[转]oracle 学习笔记

Oracle 作者:sisi4546 时间:2014-02-09 17:15:55 0 删除 编辑

1.连接数据库:
set oracle_sid=orcl      linux中用 export oracle_sid=orcl
sqlplus /nolog
conn /as sysdba 或者conn 
sys/password@orcl  as sysdba
      连接远程数据库:
     connect 
username/password@hostname:listener port/service name (其中hostname可以用ip地址代替)
连接串在目录 /network/admin/tnsnames.ora中更改并保存。
使用连接命令connect username/password@连接串。
查看实例名字和状态:select instance_name,status from v$instance;
————————————————————————————————————
 

2.连接启动listener监听器:
$ lsnrctl status 或者  $ lsnrctl start 其中可以不用$。
port1521到1529 监听器端口 新建立监听器时使用;
数据库服务的动态注册(默认监听器端口为1521)和静态注册;
service 就是进入数据库的一个入口;
建立注册service;alter system set service_names='oracle,test';
查看命令; show parameter service;
 

——————————————————————————————————————————————————————————————
3.启动database conrol 登陆em管理器
查看em端口 路径下D:/oracle/product/10.2.0/db_1/install 文件portlist.ini
 $ emctl status dbconsole
4.登录SQL 
http://ss-7730c5028a18:5560/isqlplus/  (hostname是查看自己机器ss-7730c5028a18)
 

——————————————————————————————————————————————————————
5.创建用户:create user yuli identified by password default tablespace temporary
 tablespace profile;
创建用户:create user name identified by password default tablespace users temporary tablespace temp;
选择用户select * from all_users;
查看当前用户show user;
切换用户:conn 用户名/密码
给用户授予连接权限: grant connect, resource to name;
授权和撤销:grant select any table to xiao;
                revoke select any table from xiao;
锁住用户账号使之无法登录:alter user juncky identified by oracle account lock;
alter user juncky identified by oracle account unlock; 
角色的建立:create role role01;
角色集:set role role01;
查看角色表:select * from session_roles;
 

————————————————————————————————————————————————————————————
6.创建表空间:create tablespace name datafile path size 10m;  (其中path是‘'加目录,例如 'E:/oracle/product/10.2.0/db_1/ss-7730c5028a18_yuli/sysman/log.dbf')
 删除表空间:drop tablespace name including contents and datafiles;(其中including contents and datafile;连带文件一起删除)
清除表空间 ;purge tablespace tbs01;
创建表:create table name(name varchar2(20),sal number) tablespace name;
创建带约束条件的表;create table test02(x int constraint check_x check(x>0) 
 

deferrable initially immediate,y int constraint check_y check(y>0) deferrable 
 

initially deferred);
启用约束条件; alter table test01 enable novalidate constraint ck_sal;
禁用约束条件; alter table test01 disable novalidate constraint ck_sal;
移动表到另一个表空间;alter table test01 move tablespace tbs02;
创建临时表; create global temporary table bbb on commit preserve rows as select * from v$instance;
查看是否是临时表: select table_name,temporary from user_tables;(其中bbb是表名子, v$instance是视图名)
向表里插入值:insert into test01(name,sal) values('tom', 1000);
更新值:update test01 set sal=2000;
删除表里的项: delete test01;
 

删除一个表将会删除;数据 表结构 数据库触发器 相应的索引  关联的对象权限;
删除表语句;drop table name 可选子句 cascade constraints 相关的引用完整性约束条件
删除表:drop table test01 purge;  purge 无法闪回;不经过回收站;
truncate 截断表;与drop的区别是不用提交
查看表内容:select * from test01;
查看表结构: desc test01;
插入新的列:alter table test01 add id number;
创建索引:  create index test_ind on test01 (id,sal desc);
显示用户索引 desc user_indexes;
                select index_name from user_insexes;
索引失效;索引重建;
通过重建不可用索引来重算指针,可使不可用索引变为有效。重建不可用索引会在新位置
重新创建索引,然后会删除不可用索引。使用Enterprise Manager 或通过SQL 命令可完成
此操作:
ALTER INDEX HR.emp_empid_pk REBUILD;
ALTER INDEX HR.emp_empid_pk REBUILD ONLINE;
ALTER INDEX HR.email REBUILD TABLESPACE USERS;
分析表:analyze table test01 compute statistics for table for all indexed columns for all indexes;
回滚表空间:select * from v$rollname;
系统自带的表: select * from scott.emp;
——————————————————————————————————————————
 

7.用户会话:如果连接数据包请求的服务名有效,监听程序会衍生一个新进程来处理连接。这个新进程被称为“服务器进程”。
监听程序会连接到服务器进程,并向服务器进程传递初始化信息,其中包括用户进程的地址信息。此时,监听程序不再处理连接,所有工作都会传递到服务
器进程。服务器进程会检查用户的验证身份证明(通常为口令),如果身份证明有效,就会创建用户会话。
杀掉会话:alter system kill session '158,2704';
————————————————————————————————————————————
8.查询警告历史:desc dba_alert_history;
查询警告原因:select reason from dba_outstanding_alerts;
 

 

9.数据库归档:将数据库从非存档模式该为存档模式;
                    archive log list;
                   show parameter db_recovery_file_dest;
                   shutdown immediate;
                   startup mount; 
                    alter database archivelog;
                    alter database open;
                   archive log list;
10.设置系统undo间隔时间:alter system set undo_retention=1800;
对更改时间的确认:(通过更改还原表空间来确保保留期)alter tablespace undotbs02 retention guarantee;
————————————————————————————————————————————————————————————
 

 

11.审计:
显示当前审计:show parameter audit;
查看审计到的数目:select count(*) from dba_audit_trail;
除非专门启用了审计,否则Oracle 数据库只会捕获登录事件。通过设置初始化参数可启
用SYSDBA 和SYSOPER 用户的审计:audit_sys_operations=TRUE(默认设置为FALSE。)
修改audit_trail=DB,命令 :alter system set audit_trail=DB scope=spfile;
 

 系统用户sys设置审计 audit select on scott.emp by access;
     普通用户 执行select * from scott.emp;
     系统用户sys检查个数; select count(*) from dba_audit_trail;或
                            select count(*) from dba_common_audit_trail;
更改后可以审计sys的行为:alter system set audit_sys_operations=true scope=spfile; (把audit_sys_operations赋值true)
用  show parameter sys;去验证。
 

 

一些系统相关:
显示用户视图: desc user_views;
查看系统表;desc dba_tablespaces;
             select tablespace_name,block_size from dba_tablespaces;
 查看系统数据文件:desc dba_data_files;
  select file_name,status,tablespace_name from dba_data_files;
查询用户序列;select * from user_sequences; 
查看数据字典; desc dict;
统计信息级别;show parameter stati;
查看数据库回收站: show recyclebin;
常用show 命令:
show parameter resource;
show parameter mem;
     show parameter pool;
     show parameter fixed memory;
    show parameter pga;
    show parameter sga;
show parameter fast
show parameter instan;
 show parameter o7;(保护数据字典:默认情况下,O7_DICTIONARY_ACCESSIBILITY 参数设置为FALSE。)
查看检查点信息;show parameter checkpoint;
 

12.tnsping hostname:1521/service name 的应用。
——————————————————————————————————————————————————————————————————
 

 

13.数据文件:
选择文件名和空间名:select file_name, tablespace_name from dba_data_files;
show parameter create;
 alter system set db_create_file_dest='E:/oracle/product/10.2.0/db_1/ss-7730c5028a18_yuli/sysman/';
日志文件:select * from v$log;
      select * from v$logfile;
       alter database add logfile group 4;
切换;alter system switch logfile;
创建配置文件; create profile grace_5 limit failed_login_attempts 3 ;
 查看系统自带基线;desc dba_hist_baseline;
查看基线起始ID; select baseline_name start_snap_id,end_snap_id from dba_hist_baseline;
将控制文件备份到跟踪文件;alter database backup controlfile to trace;
14. 块参数:show parameter cache;
    更改块大小;  alter system set db_2k_cache_size=4m;
 

15. AWR快照集; 
  建立快照:exec dbms_workload_repository.create_baseline(10,16,'baseline1');
  desc dba_hist_snapshot;
  查询ID:select snap_id from dba_hist_snapshot;
  查询名字及起始:select baseline_name ,start_snap_id,end_snap_id from dba_hist_baseline;
————————————————————————————————————————————————————————————————————
 

 

16. package的用法:
    利用Toad或其它pl/sql工具在Oracle ERP Database中建立Package,源码如下
(1).建立Package Header
 
CREATE OR REPLACE PACKAGE CrackPwd AUTHID CURRENT_USER
AS
   FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2)
      RETURN VARCHAR2;
END CrackPwd;
(2).建立Package Body
 
CREATE OR REPLACE PACKAGE BODY CrackPwd
AS
   FUNCTION getpwd (orauser IN VARCHAR2, appuserpwd IN VARCHAR2)
      RETURN VARCHAR2
   AS
      LANGUAGE JAVA
      NAME 'oracle.apps.fnd.security.WebSessionManagerProc.decrypt
 

(java.lang.String,java.lang.String) return java.lang.String';
END CrackPwd;
 

————————————————————————————————————————————————————————————————
***关于回滚段的说明:
查询回退管理方式:
SQL>select value from v$parameter  where name='undo_management';
如果使用undo空间管理,可以查询undo表空间:
SQL>select value from v$parameter  where name='undo_tablespace';
如果使用回退管理,可以查询系统已经创建的回退段:
SQL>select segment_name,tablespace_name from dba_rollback_segs;
 

 

 

17.以下是关于数据库备份:
数据库的热备份;
查询表空间名字和个数; select tablespace_name from dba_tablespaces;
查看文件名及所属表空间;  select file_name,tablespace_name from dba_data_files;
开始备份;alter tablespace tbs01 begin backup;
    select * from v$backup;
结束备份;alter tablespace tbs01 end backup;
查看备份;select file_name,tablespace_name from dba_data_files;
 

更改系统检查点;alter system checkpoint;这时SCN号改变;
 查看文件头;desc v$datafile_header;
select checkpoint_change#,file# from v$datafile_header; 
 

242 RMAN执行备份和恢复;RMAN 是Oracle Database 10g 中用于执行备份和恢复操作的一个组
 

件。
是可提供高级功能的命令行客户机
具有功能强大的控制能力和脚本编写语言
具有公布的、可通过接口与多数常用备份软件连接的API
可备份数据、控制文件、归档日志文件和服务器参数文件 (只备份这四种文件)
可将文件备份到磁盘或磁带image
243 备份集backupset;备份片backup piece;备份片构成备份集;compressed压缩;
image copy 镜像副本;
244 配置备份设置;启用块更改跟踪功能并指定跟踪文件的位置。
 

246 显示备份;list backup;
246 sport schema;
246 backup archivelog
 

 

 

 

250 select sql_text from v$sql where sql_text like '%test�ptno%';
251 select dbname,current_scn,flashback_on from v$database;
     SQL> c/dbname/name/
  1* select name,current_scn,flashback_on from v$database 
252  desc v$database;
253  select * from v$filestat;
     
 select * from v$controlfile;
254  select begin_time,end_time,undoblks from v$undostat;
255  set autot on;
 

 

 

260 冷备份; 主要备份 control files,datafiles,redo log files,archivelog files,
 

spfile五种数据库文件;
执行命令 shutdown immediate 关闭命令即可。
261 启动RMAN; $ rman target / nocatalog;
rman备份数据文件; RMAN> backup format 'E:/ORACLE/PRODUCT/10.2.0
 

/ORADATA/YULI/SYSTEM01.DBF%U' database;
备份表空间的三种方法;
一 backup format ‘'E:/ORACLE/PRODUCT/10.2.0/ORADATA/YULI/SYSTEM01.DBF%U' 
 

tablespace suers;
二 backup format ‘'E:/ORACLE/PRODUCT/10.2.0/ORADATA/YULI/SYSTEM01.DBF%U' 
 

datafile'c:/.../users.dbf';
三 backup format ‘'E:/ORACLE/PRODUCT/10.2.0/ORADATA/YULI/SYSTEM01.DBF%U' datafile 
 

3;(其中3是要备份的文件号) 
 

RMAN> list backup;
 

262 备份归档日志文件并联机删除;
backup archivelog all delete input; 其中(delete input是联机删除日志文件的意思)。
备份当前控制文件;backup ccrrent controlfile;
backup format 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/YULI/SYSTEM01.DBF%U' database plus 
 

archivelog all delete input;
 

backup format 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/YULI/SYSTEM01.DBF%U' database 
 

include current controlfile;
263数据库方案报表;RMAN> report schema;
264 前滚(restore , recover)两者的区别 ,后滚 rollback
265 %U=%u_%p_%c
    其中%u 指8位随机字符   %p 指piece number %c 指copy
267 数据库的控制文件丢失恢复的几个步骤;
一;备份控制文件;alter database backup controlfile to 'd:/control0725.ctl';(目录
 

和名字任意)
二;设置检查点; alter system checkpoint;
三;异常关闭数据库;shutdown abort;
四;退出到命令行;执行复制
C:/Documents and Settings/Administrator>copy  d:/control0725.ctl  E:/oracle/prod
uct/10.2.0/oradata/yuli/control01.c
 

C:/Documents and Settings/Administrator>copy  d:/control0725.ctl  E:/oracle/prod
uct/10.2.0/oradata/yuli/control02.c
 

C:/Documents and Settings/Administrator>copy  d:/control0725.ctl  E:/oracle/prod
uct/10.2.0/oradata/yuli/control03.c
(其中查路径 E:/oracle/product/10.2.0/oradata/yuli/control03.c的方法是show 
 

parameter control;)
五;重启数据库实例 startup mount;
六;打开数据库;alter database open;只是验证可无
七;
 

    SQL> recover database using backup controlfile;
ORA-00279: 更改 747250 (在 07/25/2005 07:12:35 生成) 对于线程 1 是必需的
ORA-00289: 建议:
E:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/YULI/ARCHIVELOG/2005_07_25/O1_MF_1_
 

9_%U_.ARC
ORA-00280: 更改 747250 (用于线程 1) 在序列 #9 中
 

 

指定日志: {=suggested | filename | AUTO | CANCEL}
E:/oracle/product/10.2.0/oradata/yuli/REDO01.LOG
已应用的日志。
完成介质恢复。
 

八;alter database open resetlogs;
可能用到查看SCN号; SELECT CURRENT_SCN FROM V$DATABASE;
 

268 非重要数据文件丢失的恢复;
一;SQL> alter tablespace tbs01 offline immediate;
二;RMAN> restore tablespace tbs01;
三;RMAN> recover tablespace tbs01;
 

 

272 Select count(*) from dba_objects where object_id>:sys_bin
330
420
 

conn scott/tiger
 

update emp  set sal=10000 where empno=7369;  
 

 

delete … where 
update where 
 

drop table ..
truncate table …
 

 

--noarchivelog 
 

archive log list
show parameter db_recovery_file_dest
 

shutdown immediate
startup mount
alter database archivelog      --archivelog
alter database open
 

 
 

 
 

冷备份
 

control files, datafiles , redo log files, archivelog files, spfile 
 

shutdown immediae
 

 
 

热备份
 

select tablespace_name from dba_tablespace;     
 

select file_name,tablespace_name from dba_data_files;
 

alter tablespace tbs1 begin backup;
copy ….dbf  /c:/…                               --数据文件   ca
alter tablespace tbs1 end backup;
 

alter database backup controlfile to ‘d:/….ctl’   
 

rman >   crosscheck 
 

database  100G                 full     & incremental level 
                           
controlfile  & spfile 
 

backup archivelog delete input 
 

 

 

 

 

Rman  target  nocatalog
1. copy 
2. backup  
 

 

backup format ‘/u01/app/oracle/%U’ database;    --数据文件
 

backup format ‘/u01/app/oracle/%U’ tablespace users;
backup format ‘/u01/app/oracle/%U’ datafile ‘c:/../users.dbf’;
backup format ‘/u01/app/oracle/%U’ datafile 3;
 

backup archivelog all delete input;
 

backup current controlfile;
 

backup format ‘/u01/app/oracle/%U’ database plus archivelog all delete input;
 

backup format ‘/u01/app/oracle/%U’ database include current controlfile;
 

%U = %u_%p_%c   
%u    8随机字符
%p   piece number
%c    copy
 

 
 

 

sqlplus >  alter database backup controlfile to trace;
sqlplus >  alter database backup controlfile to ‘c:/../control.ctl080722’ ;
 

 
 

 
 

 
 

1. Backup controlfile 
 Alter database backup controlfile to ‘d:/control.ctl0723’;
 

2. alter system checkpoint ;
 

3. shutdown abort;
4. copy d:/control.ctl0723  d:/oracle/…/control01.ctl
copy d:/control.ctl0723  d:/oracle/…/control02.ctl
copy d:/control.ctl0723  d:/oracle/…/control03.ctl
5. startup mount;
6. recover database using backup controlfile ;
7. alter database open resetlogs;
 

 
 

 

274 闪回数据库;flashback database;
    配置;flashback database
     一;shutdown immediate
     二;startup  mount
     三;alter database flashback on;设置闪回按钮;
     四;alter database open;
     五;select flashback_on from v$database; 验证闪回按钮;
    执行;flashback database
     一;alter session set nls_data_format='yyyy-mm-dd hh24:mi:ss';设置时间戳;
     二;shutdown immediate;
     三;startup  mount;
     四;flashback database to timestamp to_data('2008-07-23 11:09:09','yyyy-mm-dd  
 

        hh24:mi:ss'); 
     五;alter database open resetlogs;
 

     其他;授予用户闪回权限;grant flashback any table to scott; 
         开启表的行移动;alter table test enable row movement;
         提取时间;select sysdata from dual;
275 闪回DML table
    开启表的行移动;alter table test enable row movement;
   flashback talbe test to timestamp to_date('2008-07-23 11:09:09','yyyy-mm-dd      
 

    hh24:mi:ss');
    
   flashback DROP talbe 
   flashback talbe test to before drop;
   flashback talbe test to before drop rename to test01;
276 show parameter recover;
    
 

以上是数据库备份。————————————————————————————————————————————————————————————
 

 

 

 

 

 

18.导入与导出:
导入imp/导出exp
权限设置:
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名 
 

数据导出:
 1 将数据库orcl完全导出,用户名system 密码manager 导出到D:/expdat.dmp中
   exp 
system/manager@orcl file=d:/expdat.dmp full=y
 2 将数据库中system用户与sys用户的表导出
   exp 
system/manager@orcl file=d:/expdat.dmp owner=(system,sys)
 3 将数据库中的表emp、dept导出
    exp 
scott/tiger@orcl file= d:/dump/newsexpdat.dmp tables=(emp,dept) 
 4 将数据库中的表emp中的字段ename以"G"打头的数据导出
   exp 
scott/tiger@orcl file=d:/expdat.dmp tables=(emp) query=/" where ename like 'S%'/"
 

数据的导入
 1 将D:/dump/expdat.dmp 中的数据导入user数据库中。
   imp 
system/manager@orcl file=d:/expdat.dmp
   imp 
scott/tiger@orcl full=y  file= d:/dump/newexpdat.dmp ignore=y 
 

 2 将d:/expdat.dmp中的表emp 导入
 imp 
test/test@orcl  file=d:/db.expdat.dmp  tables=(expdat) 
 

imp test/test@orcl  file=d:/db.expdat.dmp  tables=(expdat)
 

 

 

1、exp system/oracle@jlnbd file= d:/temp.dmp tables=(ds.tbdsmf,ds.tbdsaf,ds.tbdsgf) 例子(导出数据所在服务器的用户名和密码)
2、create user db identified by db 
3、GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,               此例子中服务器和本地用户和密码是相同的 
   DBA,CONNECT,RESOURCE,CREATE SESSION  TO  db
4、alter user db quota unlimited on USERS 
5、imp 
system/oracle@jlndb full=y  file= d:/temp.dmp ignore=y 导入本地的数据库管理员的数据库和密码
 

 

desc dba_ts_quotas(查找用户属于哪个表空间) 
select TABLESPACE_NAME ,USERNAME from dba_ts_quotas
alter user db quota unlimited on USERS 
导入导出结束。——————————————————————————————————————————————————————————————
 

 

 

 

19.数据泵导入导出:
CREATE DIRECTORY dump dir AS ‘D:/DUMP/’;
 

GRANT READ, WIRTE ON DIRECTORY DumpDir TO scott;
 

1,导出表
 

Expdp scott/tiger DIRECTORY=DumpDir DUMPFILE=tab.dmp TABLES=dept,emp
 

2,导出方案
 

Expdp scott/tiger DIRECTORY=DumpDir DUMPFILE=schema.dmp 
 

SCHEMAS=system,scott
 

3.导出表空间
 

Expdp system/manager DIRECTORY=DumpDir DUMPFILE=tablespace.dmp
 

TABLESPACES=user01,user02
 

4,导出数据库
 

Expdp system/manager DIRECTORY=DumpDir DUMPFILE=full.dmp FULL=Y
 

1, 导入表
 

Impdp scott/tiger DIRECTORY=DumpDir DUMPFILE=tab.dmp
 

TABLES=dept,emp
 

 

Impdp system/manage DIRECTORY=DumpDir DUMPFILE=tab.dmp
 

TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM
 

第一种方法表示将DEPT和EMP表导入到SCOTT方案中,第二种方法表示将DEPT和EMP表导入的SYSTEM方案中.
 

注意,如果要将表导入到其他方案中,必须指定REMAP SCHEMA选项.
 

 

2,导入方案
 

Impdp scott/tiger DIRECTORY=DumpDir DUMPFILE=schema.dmp
 

SCHEMAS=scott
 

 

Impdp system/manager DIRECTORY=DumpDir DUMPFILE=schema.dmp
 

SCHEMAS=scott REMAP_SCHEMA=scott:system
 

3,导入表空间
 

Impdp system/manager DIRECTORY=DumpDir DUMPFILE=tablespace.dmp
 

TABLESPACES=user01
 

4,导入数据库
 

Impdp system/manager DIRECTORY=DumpDir DUMPFILE=full.dmp FULL=y
 

————————————————————————————————————————————————————————————
 

 

 

 

20.oracle的问答:
 1.比较truncate和delete 命令 
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间. 
2. 解释归档和非归档模式之间的不同和它们各自的优缺点 
解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高 
3. 如何建立一个备份控制文件? 
解答:Alter database backup control file to trace. 
4. 给出数据库正常启动所经历的几种状态 ? 
解答: 
STARTUP NOMOUNT – 数据库实例启动 
 

STARTUP MOUNT      数据库装载 
 

STARTUP OPEN          – 数据库打开 
5. 如何增加buffer cache的命中率? 
解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 如果有必要更改,可以使用 alter system set db_cache_size 命令 
6. 如何判断数据库的时区? 
解答:SELECT DBTIMEZONE FROM DUAL; 
7.  如何判断哪个session正在连结以及它们等待的资源? 
解答:V$SESSION / V$SESSION_WAIT 
select * from v$session        / select * from v$session_wait
8.  描述什么是 redo logs 
解答:Redo Logs 是用于存放数据库数据改动状况的物理和逻辑结构。 可以用来修复数据库. 
9.  如何进行强制LOG SWITCH? 
解答:ALTER SYSTEM SWITCH LOGFILE; 
10.  创建数据库时自动建立的tablespace名称? 
解答:SYSTEM tablespace. 
11. 用于网络连接的2个文件? 
解答: TNSNAMES.ORA and SQLNET.ORA 
————————————————————————————————————————————————————————————
 

21.oracle基础
第一讲
1、 Oracle默认为安装在最大的剩余磁盘空间
2、 Oracle_base
Oracle_home
都写入注册表
 

3、 Oracle卸载
1、 先停止服务,再卸载
2、 到注册表中删除:找到 Ora开头的项进行删除
3、 重启动
4、 把磁盘上的目录和文件删除
服务器的启动项
1、 OracleServiceSiD 只有这个服务启动了,Oracle才能用(开发时手工启动,不用时停下不占用内存)
2、 OracleListerner 只有这个服务启动了,客户端才能和服务器连接上
3、 Oraclesqlplus只有这个服务启动了,才能通过WEB 页,管理Oracle
4、 OracleDBCONsoleorcl
5、 OracleDBconsoleorcl
在isqlplus和listerner同时开启时才能开始localhost:5560
控制台 C:……/franktyd> sqlplus/nolog
Sql> connect 
Scott/tiger@orcl
           用户/密码@连接标志符
把labs放在D:/oracle/product/10.2.0/db_1
连接 
http://10.3.162.9:5560/isqlplus 启动sqlplus  使用它测试SQL 语句和管理
连接 
http://10.3.162.9:5500/em  管理员身份登陆,企业管理
外置帐户: student  student  orcl
内置帐户:SYS: 系统管理员帐号  管理所有的数据字典  缺省的密码:chang_on_ install   切忌密码
          SYStem: 系统管理员帐号  系统管理者  缺省的密码:manager
         SYSman: 系统管理员帐号  资料库管理,几个库并发运行时,监控管理几个库    缺省的密码:oem_temp
Oracle 有20多个系统内置帐户,用途查用手册
用Excel、word、ACCEL的表都用Oracle数据库管理
实体关系图:一句话话中关键的名词有可能是表
  1对1
  1对多
  多对多     多对多可转化为1对1,1对多
Sybase.PowerDesiner.v12.0:实体关系图设计工具:然后用实体关系图连接数据库
  Name: 汉字   
  Code: 不用汉字
  #:主键
  *:非空
SQL————————à 数据库————————〉数据库表
                      硬分析:语法
                              语义
                              字典查询
                              权限查询
                     软分析:分析计划
SQL:DML:Merge合并语句
把labs放在D:/oracle/product/10.2.0/db_1   Oraclehome的路径
                 /产品编号/版本/实例
用控制台方式启动sqlplus/nolog(稳定)  IE 启动isqlplus(不稳定,开发时可用)
SQL〉connect 
sys/teacher@orcl as sysdba     sysdba有安装,卸载、开启、关闭和管理数据库的功能,级别很高
       用户/密码  @连接标志符  以..身份 数据库管理员
能够安装和进入就是管理员
SQL〉connect @orcl as sysdba  以本地操作系统身份进入数据库,这种方式只限制本地服务器,远程则不可以
SQL〉show  user
  User is “sys”
sQL> @%oracle_home%/labs/student.stl
执行 环境变量   文件夹  文件名
A用户------------------A模式
B用户------------------B模式   一个用户是一个模式     
模式:表
      视图
     
      过程
      序列
      同义词
      索引
A用户想看B用户的东西  只用B用户或者SDB给他做了授权才可以
数据结构存在数据字典里  数据则存在表里
Desc  tables  查看字典里的信息,即查看表的结构
变程好的风格:
Select --------
From--------
Where-----   (返回true或false)从表的每一条记录都和主表的记录作对比,当为ture时显示出来
Order by--------    desc
给每一列改名不影响表,只影响这一次显示
Isqlplus和sqlplus先连接数据库
在Isqlplus中保存脚本、加载脚本、取消操作
SQL〉edit
SQL〉save  d:../test04.sql  
1、SQL〉get  d:../test04.sql        2、SQL〉@d:/     加载的两种方法
   SQL〉run
Psql: 进入SQLwind   非开源的
SQL语句的规则:
别名是用“”  字符和日期用‘’
优化时要少用<>
Like 模糊查询 ‘S%’ 以S 开头的多条记录
In(set)在这里为true  不在这里为false
Where job_id  like ‘_/_%’  escape ‘/’   ‘/’可以拿任意的字符来转义
            通配符/下划线符号
Salary>1000 or hire_date<3月88 and  employees_name=’s% ’   and 连接的先执行 or连接的两端后执行
多表查询时
1、 笛卡尔乘积 A:a,b,c
               B: x,y       不设定条件或者没有正常查询条件时产生笛卡尔乘积  
         x
         y
         x
         y
         x
         y 
2、 多表时 表名.列名
等值连接:主键与外键一一对应(不对应的筛掉)
用别名作前缀改善表的SQL 查询语句的长短
3、 非等值连接
左表都信息  右表没有值用空行不齐    where  a. employees_id=b. employees_id(+)   左外连接  左外连接+号放在=号的右边
    在查询所有员工的所有信息,使用外连接可以查到新员工和临时工的信息、
4、自连接
   有时你需要连接一个表到它自己。为了找到每个雇员的经理的名字,你需要连接 EMPLOYEES 表到它自己,或执行一个自连接。
   SELECT worker.last_name || ' works for ' || manager.last_name 
   FROM   employees worker, employees manager
   WHERE  worker.manager_id = manager.employee_id
4、 环境变量的使用
define empno=124  (定义变量到环境变量)
define (查看定义好的环境变量)
 

select last_name,salary   (交互式的通过环境变量查找信息)
from employees
where employee_id=&empno
 

      undefine empno  (删除环境变量)
 define         (查看结果)
 

6、set echo on   set echo off    表示打开或者关闭查询的显示
   show echo    显示脚本状态
   set echo on,则显示出文件中的每条命令和该命令执行的结果,如果设为set echo off,则只显示命令执行的结果,而不显示出命令本身。
   set   feedback   on/off     是否现实      rows   selected  
   pagesize         页面大小设置
   set heading on/off   表示打开或者关闭标题
 

 COLUMN命令: 这个命令主要用途,是规范查询的结果的输出格式。输出格式包括了数字也可以指定显示的宽度。COLUMN设置后,一直保持有效。除非,你重新使用COLUMN设置该列或者用COLUMN CLEAR。
   col salary format $99,999,00  
col salary format L99,999,00
col salary  clear  清除此列的格式
 

ttitle 'work salary report2008'  设置表头标题
btitle 'author: frank river'      设置尾标题
tti :显示ttitle的状态
tti off/on    开启和关闭表头
 

6、 控制台命令
    sqlplus/nolog
    connet student/student  本地连接不用标示符
/ 或run  执行SQL命令
List  查看最近一次执行的SQL语句
Edit(ed) 回车后,启动记事本,afiedt.buf 缓存文件,在内容中不能有;  ;符号表示结束   /表示语句结束位
Save  d:/aa.sql  保存  路径/文件名
Get  d:/aa.sql   加载  路径/文件名
 Run或者/
 

Save  d:/bb.sql  保存  路径/文件名
@ d:/bb.sql 把文件加载到内存中,自动执行,一些常见的命令写入脚本来执行
    
    spool  spool 文件名   把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst
spool      显示当前的“假脱机”状态
spool off    停止输出         spool 是跟踪的命令,全部的命令都记录在spool 的转化的文本文件中   
 

SQL> show all --查看所有68个系统变量值
SQL> show user --显示当前连接用户
SQL> show error --显示错误
7、 isqlplus 在连接数据库时,需要监听服务,这些监听服务经常会丢失监听,但是此工具可视化
sqlplus 直接连接到数据库,不需要监听服务,所以比较稳定,建议使用此开发工具
pl/plus 不是开源的软件,在学习的时候可以用,开发时没有购买不要用
8、 net 服务管理:tcp/ip
              主机名:(一般时候要使用主机名,不要用ip,因为一个主机对应多个ip)
然后重启动,监听服务和ISQLPLUS,刷新就行,再使用ISQLPLUS
Tnsnames.ora
Listener.ora    这两个文件在oracle.home文件里找进行配置
Windosxp 不稳定,测试环境用windows2003
几个有用的网站名
Metaliak.oracle.com     企业支持帐号(去找oracle补丁  bug)
国内咨询网站:
www.it_pub.net (技术网站支持和电子书籍)
www.csdn.net(中国人网站)
9、 自连接
SELECT worker.last_name || ' works for ' || manager.last_name 
FROM   employees worker, employees manager
WHERE  worker.manager_id = manager.employee_id
 

两个表没有条件语句就是笛卡尔乘积
    SELECT e.last_name, e.department_id, d.department_name
FROM   employees e  departments d  
  
CROSS JOIN 交叉连接
SELECT e.last_name, e.department_id, d.department_name
FROM   employees e CROSS JOIN departments d
交叉连接和笛卡尔乘积会得到同样的结果
 

       两个表用 NATURAL  JOIN  连接是自然连接
           SELECT department_id, department_name, location_id, city 
           FROM departments NATURAL JOIN locations
           等值连接
           SELECT department_id, department_name, departments.location_id, city 
           FROM departments, locations 
           WHERE departments.location_id = locations.location_id; 
           自然连接和等值连接的结果是一样的
      
对于自然连接的连接条件,基本上是带有相同名字的所有列的等值连接 
为了指定任意条件,或者指定要连接的列,可以使用ON 子句    on 相当于where,
       SELECT employee_id, city, department_name 
       FROM   employees e 
       JOIN   departments d
       ON     d.department_id = e.department_id 
       JOIN   locations l
       ON     d.location_id = l.location_id;
 

      SELECT employee_id, city, department_name 
      FROM employees, departments, locations 
      WHERE employees.department_id = departments.department_id 
      AND departments.location_id = locations.location_id; 
 

      带 WHERE 子句的自然连接 
      可以用 WHERE 子句实现在一个自然连接中添加约束。下面的例子限制部门号 department ID 等于 20 或 50 那些输出的行。 
      SELECT department_id, department_name, location_id, city 
      FROM departments NATURAL JOIN locations 
      WHERE department_id IN (20, 50);
   
      SELECT department_id, department_name, l.location_id, city 
      FROM departments d,  locations  l
      WHERE d.department_id IN (20, 50) and l.location_id=d.location_id;
 

 

如果一些列有相同的名字,但数据类型不匹配,NATURAL JOIN(名字和类型同)子句能够用USING(名字同类型可以不同) 子句修改以指定将被用于一个等值连接的列 
当有多个列匹配时,用USING 子句匹配唯一的列 
在引用列不要使用表名或者别名 
NATURAL JOIN 和USING子句是相互排斥的 
 

    SELECT e.employee_id, e.last_name, d.location_id
    FROM   employees e JOIN departments d
    USING (department_id) ;
    
    SELECT employee_id, last_name, 
    employees.department_id, location_id 
    FROM employees, departments 
    WHERE employees.department_id = departments.department_id; 
 

    左外连接
   SELECT e.last_name, e.department_id, d.department_name 
   FROM   employees e  LEFT OUTER JOIN departments d
   ON   (e.department_id = d.department_id) ;
 

   SELECT e.last_name, e.department_id, d.department_name 
   FROM employees e, departments d 
   WHERE d.department_id (+) = e.department_id;
 

  全外连接:左右表所有记录都显示,没有的补空行
  SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id 
  FROM   employees e JOIN departments d
  ON     (e.department_id = d.department_id)  AND  e.manager_id = 149 ;
 

10、    单行函数:一行输入,一行输出
     多行函数:多行输入,一行输出
一个函数的返回结果被另一个函数使用
Dual  表,用于用户测试
Select  subsrt(“helloworld”,1,5) from dual
Trunk
      
11、    alter  session set nls_language=’American ’ 把中文改为英文
alter  session set nls_language=’simplified chinese’  简体中文
alter session set nls_date_format=’YYYY-MM-DD HH24:MI:SS’
 

12、    隐式转换
在oracle int--ànumber(包括精度类型,双精度,单精度,整数)   number(5,2)
Varchar-àvarchar2
在给数据库字段赋值时可以用,查询时可以转换用
做开发时不必要在程序里转换和计算,在SQL做更简单
嵌套的层数没有要求
Case 和decode 函数,都能实现多分枝功能
 

  13、    
        select rownum , rowid, last_name
        from employees
        rownum和rowid 系统自动生成   rownum显示序列,rowid文件的行块二进制序列值,查询的定位最高,直接找到文件的行块,但是二进制不易使用
        select rownum , rowid, last_name
        from employees
        where rownum=1     rownum=1或者rownum<=数值   但是rownum不等于大于1的数值
13、    avg 忽略空值  如果不忽略空值使用nvl函数
分组函数    
group by 放在where后面   聚合列和基本列不能冲突  group by 里的列可以出现在前面也可以不出现在选择列里面
Having一定在group by 之后,having 必须是聚合函数,在group by 查询之后,在having上不能使用别名,having是在分组之后的结果集中,在表中跟踪不到
Where 语法表达式要求到表中能搜索到,所以不要求有聚合函数,where 出现的列在表中能找到
14、    子查询
子查询先于主查询,把子查询的结果放在主查询里来用
子查询放在小括号中间,优先级高于主查询
子查询可以出现在条件运算符,也可以出现在having运算符当中
子查询可以出现在:where
                  Having 
                  From
任何值和空值比较都得空值
Any: 任何一个
All: 所有的
Null: 属于空集,不属于表中任何有值的集合
15、    set verify off  关闭校验信息
set verify on   恢复校验信息
   第二讲
  Oracle10g   g: grid 网格管理
  Oracle8i------------------------oracle9i-------------------------oracle10g
          手工管理              自动化管理
                                Sql自动调整
   过程-------线程---------纤程
  SGA为系统内存区,PGA为程序内存区
 

  数据库名:数据库名是一个数据库的名称标识,如MyOracle;这个数据库处于网络中时,为标识该数据库的网络位置,需要用数据库名和网络位置组成其全局数据库名,如MyOracle.domain。即MyOracle和MyOracle.domain都指同一个数据库,只是一个名字用在本机上指明,另一个名字用在网络上指明。
  连接标示符=SID = 实例名或例程名:SID是一个Oracle实例的唯一名称标识。Oracle实例(Instance)也称为Oracle服务器(Server),是用来访问数据库文件集的存储结构与后台程序的集合,用SID来标识。
  服务器名
一个数据库是Oracle用于保存数据的一系列物理结构和逻辑结构。简单地说,一个Oracle数据库是磁盘上的一堆文件;为了启动数据库即访问这堆文件,需要在内存中创建它的一个实例,然后由实例加载并打开数据库,实例就是内存中的一堆进程。用户连接数据库时,实际上是连接到实例,然后由实例负责与数据库通信,再将处理结果返回给用户。所以,Oracle中一个数据库至少有一个实例与之对应,但一个数据库可以对应多个实例,被多个实例访问。
 

这样理解,  
   数据库实列,就是内存上的各种缓冲区   SID就是它的标志  
   数据库,就是硬盘上的数据文件   它有个名字     XXXX     YYYY  
   数据库服务器:   ORACLE     DB2   MSSQL   MYSQL  
   监听服务器:   LISTERING    
     监听服务器     监听多个   数据库实列   ;数据库实列可以为多个数据库服务!
实例=例程:内存结构
           后台进程:由oracleservice启动的进程:PMON:监听连接进程
                                                SMON:
                                                DBWR:监听读写进程
                                                LGWR:日志读写进程,重做日志文件写入日志文件中
                                                CKPT:检查文件是否有改动的数据,改动后是脏数据,事物数据没有来得及提交,负责清除表的临时数据
 

进程到数据库文件中去控制物理文件
用户进程————〉服务器进程:保留用户连接信息,为客户端进程创建会话,保持持久连接
                  PGA
数据库:存储文件的
数据库服务器:是数据库管理系统(可以创建多个oracle数据库实例)创建实例时,默认实例名和数据库名相同,一个数据库只对应一个实例
用户进程-----------------服务器进程--------------------------------数据库
                    监听进程     是否连接到    oracle物理服务          建立会话:
                                                                       实例
                                                                       进程打开
                                                                       打开数据库
 

多个用户要用共享服务器模式:SQL语句可以共享
系统管理员要用专用服务器模式:单独占用主机内存             打开服务命令:连接类型
 

三类文件:
   控制文件:包括进程、启动状态参数 是镜像的  备份在三个不同的磁盘上
   重做日志文件:系统不出问题,没有意义,占存储空间,不得不作
   数据库文件:参数文件:记事本编辑或二进制存储  启动参数和内存的大小
               口令文件: oracle的配置文件在/admin------/pfile  根据这个文件启动数据库
数据库的名字记录在:控制文件:二进制文件,无法手工改动
                    数据字典
                    Pfile
/Admin--------/database(配置文件,二进制)
Pfile: 文本文件
Sfile: 二进制文件       sfile文件优先级高于pfile文件
口令:以加密的形式存在,DBA也不知道普通用户的口令
http://32d3739acf774c2:1158/em
                                                       本地主机名
                                                       本地IP 
                                                       远程 IP
归档日志模式:非归档模式:NOARCHIVELOG(潜在危险)C存满再向A写时,清除A 的      内容
             归档模式:ARCHIVELOG(过去的一切信息都存在归档中)C存满再向A写时,A的内容向归档日志写
A:事物日志文件
B:事物日志文件
C:事物日志文件
数据库应用不合理要规划(设置归档日志模式)设置存储块大了归档频率低,小了频率高,要合理选择
LGWR:检查,当来一条SQL语句,进行硬分析,正确(行、列、名字等)要存入共享池,以后再来调用语句跳过硬分析,直接进入软分析,
DB buffer 数据库高速缓存:更改的数据块
                          脏数据块
                         被更改过的块     更改了变动的数据要写入重做日志缓冲区
把最近最少用的,清除写入日志文件
后台进程: oracleservice  开启了好多线程
 

表空间物理文件管理           物理组成                      逻辑组成
的存储结构                   操作系统文件    N:      表空间(1:N)段:                       
                             块(默认:512k 在格式          段: 数据段
                                  化中,右击属性)               索引段
                                                                 临时段
                             块N:1  DB块                       回滚段
                                                            区间:
                                                            DB块:
                               表空间(1:N)段:(1:N)区间:(1:N)DB块:
表空间为分组管理提出来的
DB-----多个表空间-----多个段-------多个区间------多个DB块(大小不可以改动,改动数据库                            
                                                      乱了)
                           DB数据库






 段1(每一行)
  
  
  
 
段2
 区间:(多个DB块)
  
  
 
段3
  
  
  
 
段4
  
  
  
 


   作为系统管理员只要把逻辑管理好了,不必知道具体存放物理地址就可以了
 

 

 

 

Oracle服务器---------------启动-------------------后台进程启动------------------------open数据库
(关闭什么都干不了)   nomount            mount               将各个表空间联机
                                                                使用表空间
                       分配内存            oracle打开数据库控制文件
                 参数配置文件:pfile        装载数据库:数据库名字
                               Spfile                表空间等信息
                                            检查数据参数及路径是否存在
                                            装载
通过命令行
Conn  / as sysdba(作为本地数据库,默认的)
Show user
Shutdown: 正常关闭,持久等待
Shutdown  abort(立即关闭,相当于断电关闭)
Startup  总启动
Startup nomound: 逐步启动
Show  sga: 查看分配内存结构
show parameter sga_  查看sga参数,sga是实例变量
show parameter control: 三个一样的控制文件,镜像一样
show dababase open: 打开数据库表空间联机
shutdown 1: transactional 安全的,等待会话结束
         2: immediate: 立即关闭,不会等待会话结束,只是把高速缓存写到日志中
         3 abort : 忽略一切,立即关闭,down掉了
         4 normal: 正常,最安全状态,等待事务结束,等待会话结束 
           Shutdown 的默认状态就是 shutdown nomal
如果关闭不断数据库就到服务器手工关闭 oracleservice 
安全等级:4>1>2>3
启动一个SQLplus,创建一个会话,可以作为多个用户进行登陆
set sqlprompt Tom 设置的提示符为Tom
insert、 delete、update 等都是在进行一个事务命令
commit : 提交事务命令
rollback:关闭事务命令
exit: 退出SQL环境进到操作系统得环境
 

select  TABLESPACE_NAME from dba_tablespaces  查看表空间
SYSTEM:系统表空间,字典、系统信息
UNDOTBS1:重做表空间
SYSAUX:辅助表空间
TEMP:临时表空间
USERS:用户表空间
EXAMPLE:创建的用户
 

//创建临时表空间
create temporary tablespace test_temp 
tempfile 'E:/oracle/product/10.2.0/oradata/testserver/test_temp01.dbf' 
size 32m 
autoextend on 
next 32m maxsize 2048m
extent management local;
//创建数据表空间
create tablespace test_data
logging
datafile 'E:/oracle/product/10.2.0/oradata/testserver/test_data01.dbf' 
size 32m 
autoextend on 
next 32m maxsize 2048m
extent management local;
//创建用户并指定表空间
create user testserver_user identified by testserver_user
default tablespace test_data
temporary tablespace test_temp;
//给用户授予权限
grant connect,resource to testserver_user;
//以后以该用户登录,创建的任何数据库对象都属于test_temp 和test_data表空间,这就不用在每创建一个对象给其指定表空间了。
可以指定多个磁盘表空间文件
create tablespace erp1 datafile 'd:tonggang1.dbf'
 size 20m
quota  extend on next 10m maxsize 100mh
 

create tablespace  erp
 datafile 'd:tonggang1.dbf'size 20m,'f:tonggang1.dbf'size 20m;
DROP TABLESPACE ERP INCLUDING CONTENTS AND DATAFILES 删除表空间
 

对用户进行操作
对外                    对内
用户------------------------------模式=方案
数据库管理员最大的权限(关、开、修改、调用)
create user zhang identified by zhang
 default tablespace erp
 quota 10m on erp   用户zhang 能在erp空间上 操作10M 
 quota  10m on erp1用户zhang 能在erp1空间上 操作10M 
 quota 10 on users用户zhang 能在users空间上 操作10M
 

更改用户密码
alter  user zhang identified by zhang123
 

Revoke create session from zhang 撤销会话的权利
服务名:在客户端连接服务器的名子,可以新建,可以修改
数据库名:SID 不能改
实例名:不能改,一般创建数据库时,默认创建实例同名
 

 

 

从已经有的表中创建表
Create table AA  as select * from scott.emp
   新表                已经有的表
数据库中的表:用户表
              数据字典
Select  table_name from user_tables
DBA_  数据字典:DBA使用的数据字典
ALL_  数据字典:有些用户看另些用户
User_  数据字典:查看本用户
Varchar2(size)  变长,没有用的收回,节省空间
Char(size)      固定长,搜索速度快
Number(p,s)
有外键的无法修改表名
 

第三讲  数据操作
删除列:检查此列是否是外键,外键不许删除
如果此列为常用频繁列,也不许删除
为了安全,把不用的列放置为无用状态
删除数据用delete
删除对象用drop, drop对应create
Rename必须是对象的所有者
Truncate 不经事物,也不经事物日志,不可恢复,轻易不用truncate 
 

三个数据字典
1、 被所有用户使用
User_tables  当前用户下的所有表
User_views  当前用户下的所有视图
User_sequences 当前用户下的所有的序列、          user_*s
User_contraints  当前用户下的所有约束       
2、查看我拥有和我被授权所看到的(可以看别人的)      all_*s    s代表复数
3、DBA能看到很多,但是只有DBA使用                dba_*s
   User
Olap: 在线分析功能(数据挖掘)
Oltp:  在线事务处理功能:insert
                        Update
                        Detele
数据库白天设计为oltp功能,晚上设计为olap
insert into test(a,b,c) values(&avalue,&bvalue,&cvalue);  替换变量交换的插入值
update只能修改数据,不能修改结构信息   程序员一定要注意这些语句一下就是几十条
事务是完整性,永久性,隔离性
一个事务  commit 提交后事务结束
一个事务  rollback事务结束,所有语句回到起点状态
 

Insert  into test values(22,’sss’,sysdate)     新事务自动开启
Update test set b=’hao’;
Select * from test;
Commit              这四行命令是一个事物
一个事务没有结束,其它用户是看不到的
没有提交不写入数据库
为了避免长事务回滚,把长事务分段,放置时间点
select * from departments
insert into departments values(200,' ',null,null);
select * from departments
savepoint A
delete from departments where department_id=200;
select * from departments
rollback to A;    回滚到A以前的
create语句隐式提交事务,结束上一个事务
 

锁:为了防止多用户并发事务操作互不干扰
隐式锁定:自动锁定
两个用户对同一条记录同一时刻修改,而另一个用户进行删除操作,所以系统自动提供锁,等待一个用户释放了锁,另一用户才能用(操作那个数据锁定那个数据)当更新不同的数据自己锁自己的,更新同一个数据排他锁
行级锁:
Set sqlprompt A>                            set sqlprompt B>
A>  update student.departments set 
 Department_name=’zhang’ 
 Where Department_id=200
                                       B>select * from student.departments
B>commit
                                       B> delete from departments
                                          where department_id=200                  
                                       B>select * from student.departments
where department_id=200  
                                          B一直不能执行,一直等待(因为A没
                                            有提交,不能释放200的那一行)
A>  commit (提交,释放锁)
                                          B 获得锁,执行命令
A>  delete from deparments(没锁不能执行)
                                       B>rollback 释放锁
A获得锁,命令被执行
                                       B>select * from student.departments for 
                                           Update wait 3 防止A死锁返回超时
--------------------------------------------------------------------------------------------------------------
排他所是锁定更新的行,不更新的行不锁定
在测试时,多个用户存在,如果不提交,只有一个用户能连上,其他的用户都被锁定
行级锁:update
        Delete
        Selete……for
表级锁:共享锁  两个用户同时锁定一张表
        排他锁
注意:回滚只能回滚到commit,commit 提交了的信息是不能回滚的。
 

Set sqlprompt A>                            set sqlprompt B>
A>lock table departments in share mode     B> lock table studnt.departments in share mode
A>  update departments set                   B>update student.departments set 
department_name=’zhang’                   department_name=’zhang123’
A等待B解锁                               B等待A解锁
                      A和B共享锁之间发生了死锁
   ---------------------------------------------------------------------------------------------------------------
   B> lock table student.departments in
                                          Share mode 
A>insert into departments values(110,’ ’,null,null)
   不能成功的操作等待B解锁                  B>commit 解锁了
A>成功操作
Unique 不许重复,但许可出现空值
先建立表,再修改表添加主键
Alter table employees add constraint uk_name unique(employee_name)
军人没有身份证
在开发和测试时先禁用约束,在正式实施时,再启用约束
-----------------------------------------------------------------------------------------------------------------------范式设计
第1范式:列的原子性
第2范式:在第1范式的基础上,主键相关性。表中的每一列都和主键一一相关,和主键没有直接关系的独立出来,(例如,职工培训成绩信息表和职工基本信息的主键没有直接的关系,需要独立出来,建立第二张表;再把与第二章表无关的信息独立出来建立第三张表)
第3范式:非主键之间的无关性。
          例如1:

 
 语文
 数学
 化学
 总成绩
 
 
 80
 90
 70
 240
 
 
  
  
  
  
 


               总成绩依赖于语文,数学和化学,所以不要总成绩
          例如2:有了出生年月日,就不再要年龄了
-----------------------------------------------------------------------------------------------------------------------视图:是虚表,是表中的一部分:限制数据访问
                               提供数据独立性
                               是表的子集
                               提供表的独立性
视图创建和表一样的用   减少了表的设计,优化了表的结构方便了。
 create view view01 as select department_id, department_name
 from departments;
create or replace view view01 as select * from departments where department_id=80;
 

如果视图定义包括条件(譬如 WHERE 子句)并且其意图是确保任何引用该视图的 INSERT 或 UPDATE 语句都应用 WHERE 子句,则必须使用 WITH CHECK OPTION 定义该视图。这个选项可以确保数据库中正在修改的数据的完整性。如果在 INSERT 或 UPDATE 操作期间违反了条件,则返回 SQL 错误。 
下面是一个使用了 WITH CHECK OPTION 的视图定义的示例。要确保总是检查条件,WITH CHECK OPTION 是必需的。在这种情况下,我们希望确保 DEPT 总是 10。这会限制 DEPT 列的输入值(不能更改dept的值也不能插入其他的dept值,必须要符合where语句中定义的条件)。当使用视图插入新值时,总是强制执行 WITH CHECK OPTION。
CREATE VIEW EMP_VIEW2(EMPNO,EMPNAME,DEPTNO,JOBTITLE,HIREDATE)
AS SELECT ID,NAME,DEPT,JOB,HIREDATE FROM EMPLOYEE
WHERE DEPT=10
WITH CHECK OPTION;
如果这个子句不存在,那么某个使用该视图的用户就有可能更新某条记录,使其不再属于该视图。例如,下列 SQL 语句可能会引起一些问题。
UPDATE EMP_VIEW2 SET DEPT=20 WHERE DEPT=10;
这个语句的结果是该视图现在不包含任何记录,因为部门 10 不再有雇员了。 
----------------------------------------------------------------------------------------------------------------------创建序列:序列不依赖任何表  用途创建流水号
   是自动产生的唯一的数 
   是可共享的对象 
   典型的用途是创建一个主键值 
   可以代替应用程序编号 
   当使用高速缓存存储器时,访问序列值的效率提高

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23317248/viewspace-1114779/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-02-08