`

工作积累(表空间、导出方案、触发器)1

阅读更多

--查看表空间、数据文件相关信息

1、查看表空间包含哪些数据文件
SELECT T.FILE_NAME,T.TABLESPACE_NAME FROM DBA_DATA_FILES T
WHERE T.TABLESPACE_NAME='TBS_PKIQ'
 


2、查看表空间 包含哪些内容
SELECT T.owner,T.segment_name,T.segment_type,T.tablespace_name FROM DBA_SEGMENTS T
WHERE T.tablespace_name='TBS_PKIQ'
 

--导出方案

导出方案(包括数据):
exp  nap/hs_hn_nap@jwzh  file=g:\nap.dmp  log=g:\nap.log  owner=nap
导出方案结构(不含数据):
      1、打开命令窗口;  2、输入exp;  3、输入用户名-密码@服务名;  4、...按提示操作...

导入方案 (导入的用户名、表空间需与被导入数据的一致) (导入方案结构与导入方案数据方法一样):
imp nap/hs_hn_nap@orcl  file=g:\nap.dmp  log=g:\nap_imp.log full=y


导出表空间:
exp pcs/hs_hn_pcs@jwzh tablespaces=TBS_HY  file=d:\tbs_hy.dmp log=d:\tbs_hy.log

导入表空间:
exp  pcs/hs_hn_pcs@jwzh  file=d:\tbs_hy.dmp  tablespaces=TBS_HY  log

 

--触发器

自述:在触发器内判断一个操作具体是什么操作,可以通过判断该表字段的
:OLD.字段,:NEW.字段 是否空值来判断是 插入、更新还是删除操作。


1.语句触发器
              语句触发器是指当执行DML语句时被隐含执行的触发器。如果在表
上针对某种DML操作建立了语句触发器,那么当执行DML操作时会自动执行触发器的相应代码。当审计DML操作,或者确保DML操作安全执行时,可以使用语句触发器。当使用语句触发器时,不能记录列数据的变化。建立语句触发器的语法如下:
CREATE [OR REPLACE] TRIGGER trigger_name
   timing event1 [OR event2 OR event3]
  ON table_name
   PL/SQL block;
其中,timing用于指定触发时机(BEFORE或AFTER);event用于指定触发事件(INSERT、UPDATE和DELETE);table_name用于指定DML操作所对应的表名。
E.G:
CREATE OR REPLACE TRIGGER tr_sec_emp
BEFORE INSERT OR UPDATE OR DELETE ON emp
BEGIN
  IF to_char(sysdate,’DY’,’nls_date_language=AMERICAN’)
  IN(‘SAT,’SUN’) THEN
  raise_application_error(-20001,’不能在休息日改变雇员信息’);
   END IF;
END;

2.行触发器
         行触发器是指当执行DML操作时,每作用一行被触发一次的触发器。
  当审计数据变化时,可以使用行触发器。建立行触发器语法:
 CREATE [OR REPLACE] TRIGGER trigger trigger_name
   timing event1 [OR event2 OR event3]
   ON table_name
   [REFERENCING OLD AS old | NEW AS new]
   FOR EACH ROW
   [WHEN condition]
   PL/SQL block;
其中,timing用于指定触发时机(BEFORE或AFTER);event用于指定触发事件(INSERT、UPDATE、DELETE);REFERENCING子句用于指定引用新、旧数据的方式,默认情况下使用old修饰符引用旧数据,使用new修饰符引用新数据;table_name用于指定DML操作所对应的表;FOR EACH ROW表示建立行触发器;WHEN子句(可选)用于指定触发条件。示例如下:
CREATE OR REPLACE TRIGGER tr_sal_change
AFTER UPDATE OF sal ON emp
FOR EACH ROW
DECLARE
  v_temp INT;
BEGIN
  SELECT count(*) INTO v_temp FROM audit_emp_change
 WHERE name=:old.ename;
  IF v_temp=0 THEN
 INSERT INTO audit_emp_change
 VALUES(:old.ename,:old.sal,:new.sal,SYSDATE);
  ELSE
 UPDATE audit_emp_change
   SET oldsal=:old.sal,newsal=:new.sal,time=SYSDATE
   WHERE name=:old.ename;
  END IF;
END;
/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics