• 杂乱无章之Oracle(二)


    六、IMPDP用法

    1、导入表

    impdp hsiufo/hsiufo directory=dump_dir dumpfile=full.dmp tables=scott.emp remap_schema=scott:scott

    注:上图为为有一个全库的逻辑备份 full.dmp,然后删除用户scottemp表,在full.dmp中导入emp到用户scott

    impdp hsiufo/hsiufo directory=dump_dirdumpfile=full.dmp tables=scott.test remap_schema=scott:system

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

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

    2、导入方案

    impdp hsiufo/hsiufodirectory=dump_dir dumpfile=full.dmp schemas=scott

    Impdp system/manager 

    DIRECTORY=dump_dir

    DUMPFILE=schema.dmp

    SCHEMAS=scott REMAP_SCHEMA=scott:system

    3、导入表空间

    Impdp system/manager DIRECTORY=dump_dirDUMPFILE=tablespace.dmp

    TABLESPACES=user01

    4、导入数据库

    Impdp system/manager DIRECTORY=dump_dirDUMPFILE=full.dmp FULL=y

    93oracle中的数据传送到excel

    1)、建立emp.sql文件,其输入的代码如下:

    set  line  120

    set  pagesize  100

    set  feedback  off

    spool  f:excelsemp

    select  *  from  emp;

    spool  off

    2)、执行这个文件

    SQL>conn  system/manager  as  sysdba

    SQL>@emp.sql

    执行命令后,会生成一个emp.LIST的正文文件

    (3)、将数据用excel打开
    首先打开excel,然后点击菜单栏中的文件-打开选中emp.LIST文件默认下一步直到完成即可。
    94、查看闪回功能是否开启
    SQL>show  parameter  bin;
    95、设置闪回功能开启或者关闭
    SQL>alter  system  set  recyclebin=off/on;
    96、查看被删除的对象
    SQL>show  recyclebin;(select * from recyclebin)
    97、清空闪回站中的内容(清空之后,对象将不能恢复)
    SQL>purge  recyclebin;
    98、清空某个表在闪回站中的内容
    SQL>purge  table  zzrk_xxb;
    99、恢复某个对象(表)
    SQL>flashback  table  zzrk_xxb  to  before  drop;
    100、直接彻底删除对象(表)(将不能恢复)
    SQL>drop  table  zzrk_xxb  purge;
    101、查看闪回时间段
    SQL>show  parameter  undo_retention; //value值单位是秒,指可以闪回这段时间内的DML操作
    102、设置闪回时间段
    SQL>alter  system  set  undo_retention=7200;//设置为7200秒,也就是2小时,可以闪回两小时之内的DML操作。
    103、时间段恢复实例
    SQL>alter  table  zzrk_xxb  enable  row  movement;//启动行移动功能
    SQL>select  *  from  flashback_transaction_query;//查看SCN号,确定恢复的时间段(SCN指START_SCN)
    SQL>flashback  table  zzrk_xxb  to  scn  NO.;(NO.指flashback_transaction_query中的START_SCN编号)
    104、只读表空间和临时表空间的恢复
    假设F:oracleproduct10.2.0oradatajinlian emp01.dbf这个文件出现问题,会报类似如下的错误“ORA-27037:unable to obtain file status”,则进行如下恢复操作
    SQL>alter  tablespace  temp  add  tempfile  ’  F:oracleproduct10.2.0oradatajinlian emp02.dbf’  size  20M;
    SQL>alter  tablespace  temp  drop  tempfile  ‘F:oracleproduct10.2.0oradatajinlian emp01.dbf’;
    105、加快数据表空间的恢复
    SQL>select  *  from  dba_data_files;
    SQL>alter  tablespace  PIONEER_DATA  begin  backup;
    SQL>host  copy  F:disk2moonpioneer_data.dbf  F:disk12moon
    SQL>alter  tablespace  PIONEER_DATA  end  backup;
    SQL>shutdown  immediate
    SQL>startup  //在启动过程中由于数据文件有问题会出现错误,这个假设是6号文件有误
    SQL>alter  database  datafile  6  offline;
    SQL>alter  database  open;
    SQL>select  *  from  v$datafile;//确认6号文件是否脱机状态
    SQL>ALTER  TABLESPACE  PIONEER_DATA  RENAME  DATAFILE  ‘F:disk2moonpioneer_data.dbf’  TO  ‘F:disk12moonpioneer_data.dbf’;
    SQL>recover  datafile  6;
    SQL>alter  database  datafile  6  online;
    SQL>select  *  from  v$datafile;//确认数据文件的各种状态
    106、使用user_source可以查看用户下的存储过程和存储函数
    107、SGA_MAX_SIZE为分配给系统全局区(SGA)最大内存。这个参数不是动态而是静态的,即只能修改该参数在spfile中的值,修改之后还要shutdown数据库,再重新启动之后才能起作用。除了该参数之外,还有两个必须静态修改的与SGA有关的系统参数,它们分别是lock_sga和pre_page_sga。
    Lock_sga被设置为true时,整个SGA会被锁在物理内存中。这样就可以避免将SGA的某些部分分配到虚拟内存磁盘上,这可以明显改进大型生产或商业数据系统的效率。该参数的默认值是false。如果IT平台不支持这样的设置,这一参数将被忽略。
    如果将pre_page_sga设为true,在实例系统启动时,整个的SGA会被读入物理内存中。这样做虽然增加了实例启动的时间和所需的物理内存,但是可以提高系统的效率。该参数默认值也是false。
    (1)显示SGA的值
    SQL>show  parameter  sga
    (2)修改lock_sga的值为true
    SQL>alter  system  set  lock_sga=true;//这个有可能会出现错误
    (3)调整日志缓冲区的大小【日志缓冲大小的值单位是字节】
    SQL>alter  system  set  log_buffer=10485760  scope=spfile;//可以使用select  10*1024*1024  from  dual;得出要修改的字节大小
    设置好之后就shutdown  immediate和startup使修改的值生效

    oracle tnsping命令、sql*plus使用

    1、测试数据库服务的命令:

          控制台 tnsping命令 IP地址   端口号 数据库服务名称

    cmd->tnsping 192.168.1.123:1521/oracle10g

    tnsping命令:如果能够ping通,则说明客户端能解析listener的机器名,而且lister也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。但是如果不能用tnsping通,则肯定连接不到数据库。

    2、查看服务配置的ora文件路径

        E:databaseoracleuserproduct11.1.0db_1NETWORKADMIN nsnames.ora

        文件内容形如:

       ORCL =

            (DESCRIPTION =

                 (ADDRESS = (PROTOCOL = TCP)

                 (HOST = 192.168.1.123)

                 (PORT = 1521))

                 (CONNECT_DATA =

                      (SERVER = DEDICATED)

                      (SERVICE_NAME = orcl)

                 )

            )

    3、使用sql*plus查询数据库

         a、登陆sql*plus,其中“主机字符串”是指服务名称:

    permanent tablespace

     d、查询所有用户:

              select * from dba_users;

         e、查询符合某些条件的用户:

              select * from dba_users where username like 'ABC%';

    使用图形工具简介

    获得企业管理器控制台的HTTP端口号

    C:oracleproduct10.2.0db_1install目录下的一个portlist.ini的正文文件(有时路径不一定是这个路径,可以使用tnsping先确定大体路径)。

    定义ORACLE_SID(如果已经定义了SID就可以直接进入下一步)

    C:Documents and SettingsOwner>cd c:oracleporduct10.2.0db_1in

    C: oracleporduct10.2.0db_1in>set  ORACLE_SID=jinlian

    利用Oracle提供的企业管理器控制程序启动控制台进程

    C: oracleporduct10.2.0db_1in>emctl  start  dbconsole

    利用Oracle提供的企业管理器查看控制台进程的状态

    C: oracleporduct10.2.0db_1in>emctl  status  dbconsole

    使用监听控制程序(lsnrctl

    C: oracleporduct10.2.0db_1in> lsnrctl

    LSNRCTL>help//此命令的帮助文档

    利用status命令获取监听器程序当前的状态

    LSNRCTL>status

    启动监听进程

    LSNRCTL>start

    注:监听进程是负责处理远程连接的,如果监听进程没有启动,用户是不能进行远程连接的。

    使用isqlplus登录界面

    C: oracleporduct10.2.0db_1in>isqlplusctl  start

    输入网址http://localhost:5560/isqlplus

    C: oracleporduct10.2.0db_1in>isqlplusctl  stop//停止isqlplus进程

    关闭数据库系统的顺序如下:

    1)在操作系统下,使用isqlplusctl  stop命令停止isqlplus进程

    2)在操作系统下,使用emctl  stop  dbconsole命令停止企业管理器的控制台进程

    3)在操作系统下,使用lsnrctl  stop命令停止监听进程

    4)在SQL*Plus中使用shutdown  immediate(也可以使用shutdown)命令关闭数据库

    5)使用SQL*Plusexit命令退出SQL*Plus

    10、启动数据库系统的顺序如下:

    1)在操作系统提示下,使用sqlplus/nolog进入SQL*Plus

    2)在SQL*Plus中使用connect  sys/密码”  as  sysdbaSYSDBA身份登录数据库

    3)使用startup命令启动数据库系统

    4)在操作系统下,使用lsnrctl  start启动监听进程

    5)在操作系统下,使用emctl  start  dbconsole启动企业管理器的控制台进程

    6)在操作系统下,使用isqlplus  start启动isqlplus进程

    11、通过移动表和索引来减少I/O竞争的实例

    1)使用user_tables获取SCOTT用户中所有的表所存放的表空间信息

    SQL>SELECT  *  FROM  user_tables;

    2)使用user_indexes获取SCOTT用户的所有索引所存在的表空间信息

    SQL>SELECT  *  FROM  user_indexes;

    3)查看用户SCOTT用户所在的默认表空间

    SQL>SELECT  *  FROM  dba_users  WHERE  username=SCOTT;

    4)使用dba_data_files列出数据库中所有的表空间及它们所对应的数据文件

    SQL>SELECT  *  FROM  dba_data_files;

    5)修改用户SCOTT的默认表空间,改为PIONEER_DATA

    SQL>ALTER  USER  scott  DEFAULT  TABLESPACE  pioneer_data;

    6)验证是否修改成功

    SQL>SELECT  *  FROM  dba_users  where  username=SCOTT;

    7)将用户SCOTTemp表移动到PIONEER_DATA表空间中

    SQL>ALTER  TABLE  emp  MOVE  TABLESPACE  pioneer_data;

    8)验证emp表是否存放在PIONEER_DATA表空间中

    SQL>SELECT  *  FROM  user_tables;

    9)查看索引所存放的表空间和状态信息等

    SQL>SELECT  *  FROM  user_indexes;

    注:有时发现访问某个表的速度突然变慢,就可以使用此语句查看一下,如果索引的STATUS变成UNUSABLE,这就是变慢的原因。

    10)重建索引并同时将它移动到PIONEER_INDEX表空间中

    SQL>ALTER  INDEX  pk_emp  REBUILD  TABLESPACE  pioneer_index;

    11)查看所建索引是否变成了VALID并且它是否存在了PIONEER_INDEX表空间中

    SQL>SELECT  *  FROM  user_indexes;

    Oracle  SQL

    LOWER(列名|表达式):字符转换成小写

    UPPER(列名|表达式):字符转成大写

    INITCAP(列名|表达式):把每个字的头一个字符转换成大写,其余的转换成小写

    CONCAT(str1,str2):将str1str2连接成一个字符串

    SUBSTR(str,m,[n]):返回str指定的子串,该子串从第m个字符开始,其长度为n。如果n省略则直接到str结尾

    如:substr(abcdefghijklmn,8)= hijklmn

    INSTR(str1,str2,[m],[n]):返回str2str1中的数字位置,m表示从第m个字符开始搜索,n表示所给字符串出现的次数,他们的默认值都是1

    REPLACE(str,str1,str2):在str中查找str1,用str2替换str1

    ROUND(str,n)str表示的数值四舍五入到小数点后的nround(1688.88,-1)=170

    TRUNC(str,n)str表示的数值截取到小数点后的n位,没有四舍五入trunc(168.88,-1)=160

    10MOD(m,n):将m除以n并取余数

    11MONTHS_BETWEEN(date1,data2):返回date1date2之间的月数,如果date1大于date2,其返回的月数为正;反之为负

    12ADD_MONTHS(date,n):把n个月加到date

    13NEXT_DAY(date,str):返回下一个由字符串(星期几)指定的日期next_day(10-may-02,monday)=13-may-02

    14LAST_DAY(date):返回date所在月的最后一天

    15TO_CHAR(date,fmt):把日期类型数据转换成变长字符串,其中,fmt为日期模式to_char(date,yyyy-mm-dd)

    16TO_NUMBER(str [,fmt]):该函数用于把字符串转换成数字

    17TO_DATE(str [,fmt]):该函数用于把字符串转换成日期型数据

    18NVL(str1,str2):如果str1值为空值(NULL),就返回str2,否则返回表达式str1的值

    19NVL2(str1,str2,str3):如果str1不为空值(NULL),就返回str2,否则返回str3的值

    20NULLIF(str1,str2):如果str1str2相等就返回空值(NULL);如果不等就返回str1

    21、使用ON子句的多表连接和附加条件

    SQL>select  w.empno,w.ename,w.job,w.sal,m.empno,m.ename,d.loc from emp w join manager m on w.mgr=m.empno join dept d on m.deptno=d.deptno where w.job in (clerk,analyst);

    22<all为小于最小的,>all为大于最大的;<any为小于最大的,>any为大于最小的,=any等价于in

    23、保存sql语句文档和执行其文档

    SQL>select * from zzrk_xxb;

    SQL>save  d:zhensqlplus //d:zhen文件中创建一个含有select语句的sqlplus.sql文档

    SQL>@d:zhensqlplus //执行d:zhen文件中sqlplus.sql文档语句

    24user_catalog可以看到用户所拥有的所有表的名称和类型,其别名是cat,查询结果一样。

    25、修改表结构

    SQL>ALTER TABLE user ADD (hiredate  DATA);//为表user添加列hiredate

    SQL>ALTER TABLE user MODIFY(hiredate  DEFAULT  SYSDATE);//为表user修改列hiredate

    SQL>ALTER TABLE user DROP COLUMN hiredate;//删除表userhiredate

    SQL>RENAME user TO worker;//将表名为user更改为worker

    注:如果修改一个对象的名字,则使用该对象的软件或对象需要重新编译或修改,这可能会对系统的效率产生冲击。

    26、对表或列添加注释

    SQL>COMMIT  ON  TABLE 表名|COLUMN 表名.列名 IS 正文’;

    27、截断表和删除表

    SQL>TRUNCATE  TABLE  表名;

    SQL>DROP  TABLE  表名;

    28、快捷出入表内容

    SQL>insert  into  user(id,name) select pid,pname from emp;

    29、基于另一个表的修改、

    SQL>update emp_dml set sal=(select losal from salgrate where data like 2012%);

    30、多例子查询修改记录

    SQL>update emp_dml set (job,sal)=(select job,sal from emp_dml where data like 2012%);

    31、每执行一条DML语句就自动提交一次事务

    SQL>SET  AUTOCOMMIT  ON//之后的updateinsertdelete语句就自动提交数据

    32、建立索引

    SQL>CREATE  INDEX  job_sal_index on empcon(job,sal);

    33、添加主键

    SQL>ALTER  TABLE  deptcon  ADD  CONSTRAINT  deptcon_pk  PRIMARY  KEY(deptno);

    34、如何使用视图的WITH  CHECK  OPTION子句

    SQL>CREATE  OR  REPLACE  VIEW  sales  AS

    SELECT  *  FROM  emp  WHERE  depno=30

    WITH  CHECK  OPTION  CONSTRAINT  sales;

    当修改表emp中的depno值时不能违反在创建视图时用WHERE子句所限定的条件

    35、修改视图

    SQL>UPDATE  sales  set  empname=zhen  WHERE  id  IN (12,13);

    36、使用WITH  READ  ONLY则视图不能修改

    37、如何创建同义词

    SQL>CREATE  SYNONYM  s  FOR  supplier;

    SQL>SELECT  *  FROM  sSELECT  *  FROM  supplier结果一样

    38、查看用户所具有的权限

    SQL>SELECT  *  FROM  SESSION_PRIVS;

    39、查看角色所具有的权限

    SQL>SELECT  *  FROM  role_sys_privs  where role

    40INTERSECT连接两个SQL语句返回两个查询结果中所有相同的数据行

    MINUS连接两个SQL语句返回在第1个查询结果中但不在第2个查询结果中的所有数据行。

    如何生成脚本文件

    SQL>select * from zd_sex;

    SQL>save d:zhensex //d盘下zhen文件夹中生成sex.sql文件

    如何编辑脚本文件

    SQL>ed  d:sql.sql

    如何执行脚本文件

    1SQL>@d:sql.sql

    2SQL>get  d:sql.sql

     SQL>/

    41、创建oracle定时执行命令job

    oracle JOB常见的执行时间 

    1、每分钟执行

    TRUNC(sysdate,'mi')+1/(24*60)

      www.2cto.com  

    2、每天定时执行

    例如:

    每天凌晨0点执行

    TRUNC(sysdate+1)

    每天凌晨1点执行

    TRUNC(sysdate+1)+1/24

    每天早上830分执行

    TRUNC(SYSDATE+1)+(8*60+30)/(24*60) 

    3、每周定时执行

    例如:

    每周一凌晨2点执行

    TRUNC(next_day(sysdate,1))+2/24

    TRUNC(next_day(sysdate,'星期一'))+2/24

    每周二中午12点执行

    TRUNC(next_day(sysdate,2))+12/24

    TRUNC(next_day(sysdate,'星期二'))+12/24 

    4、每月定时执行

    例如:

    每月1日凌晨0点执行

    TRUNC(LAST_DAY(SYSDATE)+1)

    每月1日凌晨1点执行

    TRUNC(LAST_DAY(SYSDATE)+1)+1/24 

    5、每季度定时执行

    每季度的第一天凌晨0点执行

    TRUNC(ADD_MONTHS(SYSDATE,3),'q')

    每季度的第一天凌晨2点执行

    TRUNC(ADD_MONTHS(SYSDATE,3),'q')+2/24

    每季度的最后一天的晚上11点执行

    TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 

    6、每半年定时执行

    例如:

    每年71日和11日凌晨1点执行

    ADD_MONTHS(TRUNC(sysdate,'yyyy'),6)+1/24 

    7、每年定时执行

    例如:

    每年11日凌晨2点执行

    ADD_MONTHS(TRUNC(sysdate,'yyyy'),12)+2/24

    初始化相关参数job_queue_processes alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位

    job_queue_process 表示oracle能够并发的job的数量,可以通过语句  

    show parameter job_queue_process;

    来查看oraclejob_queue_process的值。当job_queue_process值为0时表示全部停止oraclejob,可以通过语句

    ALTER SYSTEM SET job_queue_processes = 10;

    来调整启动oraclejob

    相关视图: dba_jobs all_jobs user_jobs dba_jobs_running 包含正在运行job相关信息 

    -------------------------

    提交job语法:

    begin sys.dbms_job.submit(job => :job,                       

      what => 'P_CLEAR_PACKBAL;',                       

      next_date => to_date('04-08-2008 05:44:09', 'dd-mm-yyyy hh24:mi:ss'),                       

      interval => 'sysdate+ 1/360');

      commit;

      end;

      /

    -------------------------

    创建JOB

    variable jobno number;

    begin

    dbms_job.submit(:jobno, 'P_CRED_PLAN;',SYSDATE,'SYSDATE+1/2880',TRUE);

    commit;

    运行JOB SQL> begin          

      dbms_job.run(:job1);          

      end;          

    /

    删除JOB

    SQL> begin         

    dbms_job.remove(:job1);         

    end;         /

    DBA_JOBS ===========================================

    字段(列)          类型                 描述
    JOB                NUMBER          任务的唯一标示号
    LOG_USER           VARCHAR2(30)    提交任务的用户
    PRIV_USER          VARCHAR2(30)    赋予任务权限的用户
    SCHEMA_USER        VARCHAR2(30)    对任务作语法分析的用户模式
    LAST_DATE          DATE            最后一次成功运行任务的时间
    LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小时,分钟和秒
    THIS_DATE     DATE            正在运行任务的开始时间,如果没有运行任务则为null
    THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小时,分钟和秒
    NEXT_DATE          DATE            下一次定时运行任务的时间
    NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小时,分钟和秒
    TOTAL_TIME         NUMBER          该任务运行所需要的总时间,单位为秒
    BROKEN             VARCHAR2(1)     标志参数,Y标示任务中断,以后不会运行
    INTERVAL           VARCHAR2(200)   用于计算下一运行时间的表达式
    FAILURES    NUMBER     任务运行连续没有成功的次数
    WHAT               VARCHAR2(2000) 执行任务的PL/SQL块
    CURRENT_SESSION_LABEL RAW          MLSLABEL 该任务的信任Oracle会话符
    CLEARANCE_HI      RAW MLSLABEL     该任务可信任的Oracle最大间隙
    CLEARANCE_LO      RAW              MLSLABEL 该任务可信任的Oracle最小间隙
    NLS_ENV           VARCHAR2(2000)   任务运行的NLS会话设置
    MISC_ENV          RAW(32)          任务运行的其他一些会话参数

    描述                    INTERVAL参数值
    每天午夜12点            'TRUNC(SYSDATE + 1)'
    每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
    每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
    每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)'
    每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
    每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)

    1:每分钟执行
    Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
    2:每天定时执行
    例如:每天的凌晨1点执行
    Interval => TRUNC(sysdate) + 1 +1/ (24)
    3:每周定时执行
    例如:每周一凌晨1点执行
    Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
    4:每月定时执行
    例如:每月1日凌晨1点执行
    Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
    5:每季度定时执行
    例如每季度的第一天凌晨1点执行
    Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
    6:每半年定时执行
    例如:每年7月1日和1月1日凌晨1点
    Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
    7:每年定时执行
    例如:每年1月1日凌晨1点执行
    Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

  • 相关阅读:
    【转】安装VS2008:this application has requested the run
    【转】开源史上的8大交易
    PowerDesigner属性设置笔记
    国外威客网站大盘点
    [Java]单项链表与双端链表[原]
    Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
    Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
    Jenkins学习总结(2)——Jenkins+Maven进行Java项目持续集成
    创业公司如何实施敏捷开发
    创业公司如何实施敏捷开发
  • 原文地址:https://www.cnblogs.com/jassy/p/4229586.html
Copyright © 2020-2023  润新知