设为首页 收藏本站
查看: 669|回复: 0

[经验分享] Oracle_071_lesson_p15

[复制链接]

尚未签到

发表于 2018-9-21 09:32:22 | 显示全部楼层 |阅读模式
Managing Schema Objects管理模式对象
  you should be able to:
  1、Manage constraints
  2、Create and use temporary tables
  3、Create and use external tables

  Use the>  1、Add or drop a constraint, but not to modify its structure
  2、Enable or disable constraints
  3、Add a NOT NULL constraint by using the MODIFY clause
  ALTER TABLE  
  ADD [CONSTRAINT ]
  type ();
  ALTER TABLE emp2
  MODIFY employee_id PRIMARY KEY;
  ALTER TABLE emp2
  ADD CONSTRAINT emp_mgr_fk
  FOREIGN KEY(manager_id)
  REFERENCES emp2(employee_id);
  ALTER TABLE emp2
  DROP CONSTRAINT emp_mgr_fk;
  ALTER TABLE emp2
  DROP PRIMARY KEY CASCADE;  级联删除
  ALTER TABLE myemp2
  DROP CONSTRAINT emp_name_pk ONLINE;
  ALTER TABLE dept2 ADD CONSTRAINT dept_lc_fk
  FOREIGN KEY (location_id)
  REFERENCES locations(location_id) ON DELETE CASCADE;  允许级联删除数据
  ALTER TABLE emp2 ADD CONSTRAINT emp_dt_fk
  FOREIGN KEY (Department_id)
  REFERENCES departments(department_id) ON DELETE SET NULL;  允许级联设置空值
  ALTER TABLE emp2
  DROP COLUMN employee_id CASCADE CONSTRAINTS;
  ALTER TABLE test1
  DROP (col1_pk, col2_fk, col1);
  ALTER TABLE marketing RENAME to new_marketing;  改表名

  ALTER TABLE new_marketing RENAME COLUMN team_id  TO>  ALTER TABLE new_marketing RENAME CONSTRAINT mktg_pk  TO new_mktg_pk;  改约束名
  ALTER TABLE emp2   DISABLE CONSTRAINTS emp_dt_pk;
  ALTER TABLE dept2   DISABLE primary key CASCADE;
  ALTER TABLE     emp2  ENABLE CONSTRAINT emp_dt_fk;
  A UNIQUE index is automatically created if you enable a UNIQUE key or a PRIMARY KEY constraint.
  禁用主键或唯一约束时(自动创建的唯一索引) ,其索引也会自动删除。
  An integrity constraint defined on a table can be in one of the following states:
  1、ENABLE VALIDATE
  2、ENABLE NOVALIDATE
  3、DISABLE VALIDATE
  4、DISABLE NOVALIDATE
  ALTER TABLE dept2
  ENABLE NOVALIDATE PRIMARY KEY;
  Constraints can have the following attributes:
  DEFERRABLE  延时 or NOT DEFERRABLE 不延时
  INITIALLY DEFERRED  初始化延时 or INITIALLY IMMEDIATE  初始化立即生效
  ALTER TABLE dept2
  ADD CONSTRAINT dept2_id_pk
  PRIMARY KEY (department_id)
  DEFERRABLE INITIALLY DEFERRED;
  SET CONSTRAINTS dept2_id_pk IMMEDIATE;
  ALTER SESSION  SET  CONSTRAINTS= IMMEDIATE;
  CREATE TABLE emp_new_sal (salary NUMBER
  CONSTRAINT sal_ck
  CHECK (salary > 100)
  DEFERRABLE INITIALLY IMMEDIATE,
  bonus NUMBER
  CONSTRAINT bonus_ck
  CHECK (bonus > 0 )
  DEFERRABLE INITIALLY DEFERRED );
  DROP TABLE emp_new_sal PURGE;   直接删除
  Creating and using temporary tables  创建临时表
  When  session/transaction completes
  基于事务级别: 此表commit提交后,会自动删除临时表所有数据行,效率高
  基于会话级别: 此表commit提交后,数据还在, 重新会话后数据不在
  SQL> /    重复上一次操作
  CREATE GLOBAL TEMPORARY TABLE cart(n NUMBER,d DATE)  ON COMMIT DELETE ROWS;
  CREATE GLOBAL TEMPORARY TABLE today_sales
  ON COMMIT PRESERVE ROWS AS
  SELECT * FROM orders
  WHERE order_date = SYSDATE;
  Creating a Directory for the External Table 创建外部表
  从外部目录加入数据库
  CREATE OR REPLACE DIRECTORY emp_dir
  AS '/…/emp_dir';
  GRANT READ ON DIRECTORY emp_dir TO ora_21;
  CREATE TABLE     (  , … )
  ORGANIZATION EXTERNAL
  (TYPE
  DEFAULT DIRECTORY
  ACCESS PARAMETERS
  (… ) )
  LOCATION ('')  REJECT LIMIT [0 |  | UNLIMITED];
  CREATE TABLE oldemp (fname char(25), lname CHAR(25))
  ORGANIZATION EXTERNAL
  (TYPE ORACLE_LOADER
  DEFAULT DIRECTORY emp_dir
  ACCESS PARAMETERS
  (RECORDS DELIMITED BY NEWLINE
  FIELDS(fname POSITION ( 1:20) CHAR,
  lname POSITION (22:41) CHAR))
  LOCATION ('emp.dat'));
  SELECT  *  FROM oldemp;
  CREATE TABLE emp_ext
  (employee_id, first_name, last_name)
  ORGANIZATION EXTERNAL
  (
  TYPE ORACLE_DATAPUMP         #数据泵
  DEFAULT DIRECTORY emp_dir
  LOCATION
  ('emp1.exp','emp2.exp')
  )
  PARALLEL
  AS
  SELECT employee_id, first_name, last_name
  FROM   employees;
  外部表可以实现,通过数据库对象直接访问目录文件里的格式数据,加载方式分为两种oracle_loader和oracle_datapump,oracle_loader方式通过sqlldr引擎方式加载,访问flat格式文件;oracle_datapump通过datapump接口来加载,访问通过oracle_datapump方式卸载的dmp文件;
  ------oracle_loader
  ----自定义两个格式文件内容如下:
  ====a.dat====
  360,Jane,Janus,ST_CLERK,121,17-MAY-2001,3000,0,50,jjanus
  361,Mark,Jasper,SA_REP,145,17-MAY-2001,8000,.1,80,mjasper
  362,Brenda,Starr,AD_ASST,200,17-MAY-2001,5500,0,10,bstarr
  363,Alex,Alda,AC_MGR,145,17-MAY-2001,9000,.15,80,aalda
  ====b.dat====
  401,Jesse,Cromwell,HR_REP,203,17-MAY-2001,7000,0,40,jcromwel
  402,Abby,Applegate,IT_PROG,103,17-MAY-2001,9000,.2,60,aapplega
  403,Carol,Cousins,AD_VP,100,17-MAY-2001,27000,.3,90,ccousins
  404,John,Richardson,AC_ACCOUNT,205,17-MAY-2001,5000,0,110,jrichard
  ----创建需要的目录
  CONNECT  /  AS SYSDBA;
  -- Set up directories and grant access to hr
  CREATE OR REPLACE DIRECTORY admin_dat_dir
  AS '/u01/backup';
  CREATE OR REPLACE DIRECTORY admin_log_dir
  AS '/u01/backup';
  CREATE OR REPLACE DIRECTORY admin_bad_dir
  AS '/u01/backup';
  GRANT READ ON DIRECTORY admin_dat_dir TO sun;
  GRANT WRITE ON DIRECTORY admin_log_dir TO sun;
  GRANT WRITE ON DIRECTORY admin_bad_dir TO sun;
  ----通过loader方式创建外部表,直接通过表来查询操作
  conn sun/sun
  -- create the external table
  CREATE TABLE admin_ext_employees
  (employee_id       NUMBER(4),
  first_name        VARCHAR2(20),
  last_name         VARCHAR2(25),
  job_id            VARCHAR2(10),
  manager_id        NUMBER(4),
  hire_date         DATE,
  salary            NUMBER(8,2),
  commission_pct    NUMBER(2,2),
  department_id     NUMBER(4),
  email             VARCHAR2(25)
  )
  ORGANIZATION EXTERNAL
  (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY admin_dat_dir
  ACCESS PARAMETERS
  (
  records delimited by newline
  badfile admin_baddir:'empxt%a%p.bad'
  logfile admin_logdir:'empxt%a%p.log'
  fields terminated by ','
  missing field values are null
  ( employee_id, first_name, last_name, job_id, manager_id,
  hire_date char date_format date mask "dd-mon-yyyy",
  salary, commission_pct, department_id, email
  )
  )
  LOCATION ('a.dat', 'b.dat')
  )
  PARALLEL
  REJECT LIMIT UNLIMITED;
  create table emp as select * from admin_ext_employees;
  SQL>
  SQL> SELECT * FROM emp;
  EMPLOYEE_ID FIRST_NAME           LAST_NAME                 JOB_ID     M
  

    401 Jesse                Cromwell                  HR_REP  402 Abby                 Applegate                 IT_PROG
  403 Carol                Cousins                   AD_VP
  404 John                 Richardson                AC_ACCOUNT
  360 Jane                 Janus                     ST_CLERK
  361 Mark                 Jasper                    SA_REP
  362 Brenda               Starr                     AD_ASST
  363 Alex                 Alda                      AC_MGR
  

  SQL> SELECT * FROM user_external_tables ;
  no rows selected
  [ora11@prim backup]$ ls -l
  total 20
  -rw-r--r-- 1 ora11 oinstall  228 Sep  6 21:17 a.dat
  -rw-r--r-- 1 ora11 oinstall  252 Sep  6 21:17 b.dat
  -rw-r--r-- 1 ora11 oinstall 2826 Sep  6 21:19 empxt000_2756.log
  -rw-r--r-- 1 ora11 oinstall 3110 Sep  6 21:19 empxt000_2763.log
  -rw-r--r-- 1 ora11 oinstall 3110 Sep  6 21:19 empxt001_2765.log
  ------oracle_datapump
  ----更多是实现数据迁移的功能,通过datapump方式卸载并迁移到其他系统;
  ----创建datapump方式的外部表,并将数据卸载到目录文件中;
  SQL> CREATE TABLE admin_ext_employees
  2                     (employee_id     ,
  3                      first_name      ,
  4                      last_name       ,
  5                      job_id          ,
  6                      manager_id      ,
  7                      hire_date       ,
  8                      salary          ,
  9                      commission_pct  ,
  10                      department_id   ,
  11                      email
  12                     )
  13       ORGANIZATION EXTERNAL
  14       (
  15         TYPE ORACLE_DATAPUMP
  16         DEFAULT DIRECTORY admin_dat_dir
  17         LOCATION ('emp2.dmp'))
  18        AS SELECT  * FROM emp;
  Table created.
  ----查询文件内容,大体是产生XML格式的文件
  -rw-r----- 1 ora11 oinstall 12288 Sep  6 21:33 emp2.dmp
  [ora11@prim backup]$ strings emp2.dmp
  "SUN"."U"
  x86_64/Linux 2.4.xx
  ----通过loader方式创建外部表,直接通过表来查询操作
  SQL> CREATE TABLE admin_ext_employees2
  2                     (employee_id       NUMBER(4),
  3                      first_name        VARCHAR2(20),
  4                      last_name         VARCHAR2(25),
  5                      job_id            VARCHAR2(10),
  6                      manager_id        NUMBER(4),
  7                      hire_date         DATE,
  8                      salary            NUMBER(8,2),
  9                      commission_pct    NUMBER(2,2),
  10                      department_id     NUMBER(4),
  11                      email             VARCHAR2(25)
  12                     )
  13       ORGANIZATION EXTERNAL
  14       (
  15         TYPE ORACLE_DATAPUMP
  16         DEFAULT DIRECTORY admin_dat_dir
  17         LOCATION ('emp2.dmp')) ;
  Table created.
  SQL>
  SQL> SELECT * FROM admin_ext_employees2 ;
  EMPLOYEE_ID FIRST_NAME           LAST_NAME                 JOB_ID
  

    401 Jesse                Cromwell                  HR_REP  402 Abby                 Applegate                 IT_PROG
  403 Carol                Cousins                   AD_VP
  404 John                 Richardson                AC_ACCOUNT
  360 Jane                 Janus                     ST_CLERK
  361 Mark                 Jasper                    SA_REP
  362 Brenda               Starr                     AD_ASST
  363 Alex                 Alda                      AC_MGR



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-599233-1-1.html 上篇帖子: [置顶] Oracle学习路线与方法 下篇帖子: Oracle_071_lesson_p16
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表