杂乱无章之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

原文地址:https://www.cnblogs.com/jassy/p/4229586.html