oracle常用操作

shutdown immediate 

    --1.创建表空间  

    create tablespace EAMP   

    datafile 'F:\tablespace\EAMP.dbf'   

    size 500M   

    autoextend on next 5M maxsize 1500M;  

    --删除表空间  

    drop tablespace EAMP including contents and datafiles;  

    /*用户权限  

    授予用户使用表空间的权限:*/  

    alter user eam2 quota unlimited on EAMP;  

    --2.建用户  

    create user workflow identified by workflow default tablespace EAMP;  


    --3.赋权  

    grant connect,resource,create any sequence,create any view,

    create any table,delete any table,insert any table,update any table,

    select any table, unlimited tablespace,execute any procedure,dba to workflow;  


    --解锁被锁的用户

    alter user workflow account unlock;

    --设定连接数  

     alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 10;  

     --不限制连接数 

     alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED; 

    --4.导入导出命令     

    ip导出方式: exp WMSM/[email protected]:1521/orcl file=f:/f.dmp full=y  

    exp WMSM/WMSM@ORCL file=f:\f.dmp full=y  

    imp WMSM/WMSM@ORCL file=f:\f.dmp full=y ignore=y  

    imp sdrend/sdrend2011@ORCL file=f:\data.dmp full=y ignore=y; 


    --spool D:\log\eam2.log;  sql命令行

    imp eam2/eam2@ORCL file=f:\eam2_4.dmp full=y ignore=y; 

    --spool off;

    exp eam2/eam2@ORCL file=f:\eam2.dmp full=y ; 

    --===========================================================================================================


    删除SQL外键 删除索引 删除表 修改表添加字段

--1.删除外键

ALTER   TABLE   WMSM.SEC_EMP_T   DROP   CONSTRAINT   FK_SEC_EMP_REF7 ;

ALTER   TABLE   WMSM.Sec_Org_t   DROP   CONSTRAINT   FK_SEC_EMP_REF7 ;

--查询某表的所有主外键

select * from user_constraints e where e.table_name = 'SEC_EMP_T'

--查询所有引用到该主键的记录

select b.table_name,b.column_name from user_constraints a 

inner join user_cons_columns b

on a.constraint_name = b.constraint_name

where a.r_constraint_name='PK_SEC_EMP_T' --此处输入刚才查询出来的表主键的约束名 

--2.删除索引

DROP INDEX IND_SEC_EMP_T_02;

DROP INDEX IND_SEC_EMP_T_03;

DROP INDEX IND_SEC_EMP_T_CDE;

DROP INDEX IND_T_SEC_EMP_T_01;

--3.删除主键

ALTER TABLE WMSM.SEC_EMP_T DROP CONSTRAINT PK_SEC_EMP_T;

--4.删除表

truncate table  WMSM.SEC_EMP_T;

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

--oracle备份恢复

alter system set "_ALLOW_RESETLOGS_CORRUPTION"=true scope=spfile;

shutdown immediate

startup mount

alter database datafile 'D:\tablespace\WMSDATA.dbf' offline drop;

alter database open;

Sqlplus /nolog

 Conn sys/password@ORCL as sysdba 

 drop user WMSM cascade; 

 ----------------------闪回-------------

/*undo_management,参数需要是“AUTO”,保证回滚段使用模式是SMU mode

undo_retention,单位是秒,调整可回滚的时间范围

确认系统的相关参数

命令窗口> show parameter undo

来源一:

  专用模式和共享模式的本质区别就是:用户进程对ORACLE服务器所在的计算机的内存区里”服务器进程“是专用还是共享。

  具体表现在:

  1、在共享模式下,多个用户进程共享一个服务器进程;在专用模式下,ORACLE为每一个用户进程准备一个服务器进程。

  2、在实际情况中,应用系统与数据库的连接请求总是很多,导致用户进程也很多,如果你的内存和CPU是有限的,同时,用户进程对数据库的操作占用空间不多,那你就把数据库连接模式设置为共享模式,这样,ORACLE内存区的服务器进程只是有限的几个,这几个服务器进程会通过一个调度程序来应付若干用户进程的请求。

  3、如果你的硬件资源比较好,就设置成专用模式,每一个用户进程都有一个服务器进程对应,这样,你的用户进程对数据的处理会非常快!

  简单的说,连接客户数少,需要长时间占用数据库的,建议用专有模式,如果连接客户数众多,使用共享模式。

*/

 show parameter shared_server; 1为专用模式,0为共享模式(一般用不着)

 --允许表闪回

  alter table AAA enable row movement;


  /*方法1:

查询最新的系统变更number*/

 select dbms_flashback.get_system_change_number from dual;

--查看此次变更后的表记录

 select * from AAA as of scn 2071711;

FLASHBACK TABLE AAA TO SCN 2071711;

/*方法2:*/

select * from flashback_transaction_query where table_name='AAA';

--根据scn号恢复

 select * from AAA as of scn 2051279

 FLASHBACK TABLE AAA TO SCN 2051279;

  select current_scn from v$database; 

   select dbid,checkpoint_change# from v$database; 

  select dbms_flashback.get_system_change_number from dual; 

 FLASHBACK database to scn

--drop表后的恢复

  DROP TABLE AAA;


  SELECT * FROM AAA ;


  SELECT * FROM RECYCLEBIN;

  SELECT * FROM USER_RECYCLEBIN;


  FLASHBACK TABLE AAA TO BEFORE DROP;


  --闪回  根据时间点

  FLASHBACK TABLE AAA TO TIMESTAMP TO_TIMESTAMP('2014/4/26 16:51:23','YYYY/MM/DD HH24:MI:SS'); 

  --/*------闪回数据库到某一天---*/

  Sqlplus /nolog

  Conn sys/password@ORCL as sysdba 

  shutdown immediate;  

  startup mount ; 

  FLASHBACK database  TO TIMESTAMP TO_TIMESTAMP('2014/7/16 16:51:23','YYYY/MM/DD HH24:MI:SS'); 

  alter database open resetlogs; 

  --/*------闪回数据库到某一天---*/

  select TO_TIMESTAMP('2014/4/26 16:51:23','YYYY/MM/DD HH24:MI:SS') from dual;

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

  --冷备 非归档模式

   select * from v$database; --其log_mode会显示数据库是否归档模式

  select name from v$controlfile; --列出所有 控制文件 CTL

  select name from v$datafile; --列出所有数据文件 DBF

  select member from v$logfile; --列出所有redo日志文件 LOG

  select sequence#,first_time from v$loghist; --列出所有归档redo日志文件的顺序号和产生时间


  select * from v$archived_log;

  select name,log_mode from V$database; --查看是否归档模式

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

--热备   启用归档模式

/*--D:\oracle\srvm\admin目录下init.ora

   命令行下,进到oracle目录

   sqlplus /nolog

   connect sys/password as sysdba 

   shutdown immediate;

   startup mount exclusive; 

   alter database archivelog; 

   alter database open;

   alter system archive log start;

   shutdown immediate;

   exit;

*/

         --备份表空间

         a,首先,修改表空间文件为备份模式  ALTER TABLESPACE WMSDATA BEGIN BACKUP;

         b,然后,拷贝表空间文件到安全区域 !CP WMSDATA D_PATH;

         c,最后,将表空间的备份模式关闭    ALTER TABLESPACE WMSDATA END BACKUP;

 -- 备份日志文件

 (1)通过在sqlplus上执行archive log list命令获取当前的日志顺序号,从oldest online log sequence开始到current log sequence的联机redo日志应该是热备份的一部分。 

 (2)在sqlplus上执行alter system switch logfile;命令来强迫日志切换,以便所有的日志都被归档。

  --备份 控制文件

  alter database backup controlfile to 'controlfile_back_2014-6-6' reuse;

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

 恢复步骤:LOG_ARCHIVE_DEST_1

                      shutdown数据库。

                     将全备份的数据文件放到原来系统的目录中。

                     将全备份到失败点的所有归档日志放到参数LOG_ARCHIVE_DEST_1所指定的位置。

                     利用sqlplus登陆到空实例。(connect / as sysdba)

                     然后  startup mount

                             set autorecovery on

                             recover database;

                             alter database open;

    --查看数据库是否开启闪回                         

   select flashback_on from V$database;       


   select  to_char(sysdate,'YYYY-MM-DD HH24:mi:ss') from dual;

   select  current_scn from v$database;

   如果已经开启了闪回,无须执行下面的操作。

   --cmd 命令下

 alter system set db_recovery_file_dest_size=30G scope=both;

 alter system set db_recovery_file_dest='D:\oracle\flash_recovery_area'  scope=both;

 shutdown immediate

 startup mount

 alter database archivelog;

 alter database flashback on;

 alter database open;

再进行确认:

 select flashback_on from V$database;



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

wangyajun  jiceam926

--查看每个表空间的大小

Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name ;


select num_rows * avg_row_len 

from user_tables 

where table_name = 'JBPM4_LOB';

SELECT TABLESPACE_NAME,

       TO_CHAR(SUM(BYTES) / (1024 * 1024), '999G999D999') CNT_MB

  FROM DBA_EXTENTS

 WHERE OWNER = 'eam2'

  -- AND SEGMENT_NAME = '&TABLE_NAME'

  -- AND SEGMENT_TYPE LIKE 'TABLE%'

 GROUP BY TABLESPACE_NAME;


select b.name, sum(a.bytes / 1000000) 总空间

  from v$datafile a, v$tablespace b

 where a.ts# = b.ts#

 group by b.name;



--1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:

SELECT *

  FROM V$SYSSTAT

 WHERE NAME IN ('parse time cpu', 'parse time elapsed', 'parse count (hard)');


 --发现是什么SQL语句解析效率比较低。

SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS

  FROM V$SQLAREA

 ORDER BY PARSE_CALLS;


 --2、查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。

SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA; 

  -- 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句: 

  --来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小

select (sum(pins - reloads)) / sum(pins) "Lib Cache"  from v$librarycache; 

--查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。 


select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache; 

--查看数据库数据缓冲区的使用情况

 SELECT name, value  FROM v$sysstat  WHERE name IN ('db block gets', 'consistent gets','physical reads'); 

--查看日志缓冲区的使用情况。

select name,value from v$sysstat where name in ('redo entries','redo log space requests');




 alter system set sga_target=1024m scope=spfile;

 alter system set sga_max_size=1024m scope=spfile; 

  --(如果spfile文件不存在,需先创建create spfile from pfile;)

 alter system set sga_target=12g scope=spfile; 

 alter system set sga_max_size=12g scope=spfile;


 --===========分页===========--------

 select * from( 

select t.*,row_number() over (order by t.seq_org) rowno from sec_org_t t 

where rowno between 1 and 10; 

select * from 

(select t.*,rownum as rowno from sec_org_t t ) 

where rowno between 1 and 10 ;

你可能感兴趣的:(oracle常用操作)