--查看表空间、数据文件相关信息
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;
/