ORACLE 开发常用操作(个人开发总结)

这里是平时的开发过程中自己记录的一些常用命令及开发技巧,在此建立自己的知识库,便于以后查询;

 

1.         导出表(表结构和内容)

exp  scott/tiger@orcl  tables=dept,emp  file=e:\script\tab.dmp

只导出表结构

exp  ods/ods@epmdev  tables=sp_exe_log  rows=n  file=e:\script\sp_log.dmp

导出整个方案

exp  system/admin@orcl  owner=scott  file=e:\script\scott.dmp

导出表空间

exp  system/admin@orcl  tablespaces=users  file=e:\script\users.dmp

导出整个库

exp  system/admin@orcl  full=y  file=e:\script\prod.dmp

 

注意导入和导出的区别(红色部分是有区别的部分):

2.         导入表(表结构和内容)

imp  scott/tiger@orcl  tables=dept,emp  file=e:\script\tab.dmp

导入整个方案

imp  system/admin@orcl  file=e:\script\scott.dmp  fromuser=scott  touser=scott

导入整个库

imp  system/admin@orcl  full=y  file=e:\script\prod.dmp

 

 

3.         经常会用plsql中的“导出用户对象”导出用户的所有或部分对象,这个时候可以使用sqlplus把导出的数据导入

ORACLE 开发常用操作(个人开发总结)_第1张图片

其中 c:\ 下的 cw(20121012).sql 就是用“导出用户对象”导出的文件。

1.         --导出文件的一个Bat文件

rem 设定开始时间

set "ks=%date:~,4%/%date:~5,2%/%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%"

rem 开始导出数据

exp scott/tiger@orcl  file=E:\scott.dmp -log e:\scott_log.txt

rem 设定结束时间

set "js=%date:~,4%/%date:~5,2%/%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%"

rem 把导出的开始和结束时间输出到日志文件中

 

echo Begin Time: >>e:\scott_log.txt

echo %ks%>>e:\scott_log.txt

echo End Time: >>e:\scott_log.txt

echo %js%>>e:\scott_log.txt

 

2.         修改表列的类型

ALTERTABLE C12_SALESCONTRACTLINE  MODIFY itemname2 VARCHAR2(100);

使用 ALTER TABLE 语句可以:

•   追加新的列

•   修改现有的列

•   为新追加的列定义默认值

•   删除一个列



一、建立普通表空间

CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #
指定区尺寸为128k,如不指定,区尺寸默认为64k

二、建立UNDO表空间

CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M

#
注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:

ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

三、建立临时表空间
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M

四、改变表空间状态

1.使表空间脱机

ALTER TABLESPACE game OFFLINE;

如果是意外删除了数据文件,则必须带有RECOVER选项

ALTER TABLESPACE game OFFLINE FOR RECOVER;

2.
使表空间联机
ALTER TABLESPACE game ONLINE;

3.
使数据文件脱机

ALTER DATABASE DATAFILE 3 OFFLINE;

4.
使数据文件联机

ALTER DATABASE DATAFILE 3 ONLINE;

5.
使表空间只读

ALTER TABLESPACE game READ ONLY;

6.
使表空间可读写

ALTER TABLESPACE game READ WRITE;

五、删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

六、扩展表空间

首先查看表空间的名字和所属文件

select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;

1.增加数据文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;

2.手动增加数据文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;

3.设定数据文件自动扩展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;

设定后查看表空间信息

select a.tablespace_name,a.bytes total,b.bytes used, c.bytes free,
(b.bytes*100)/a.bytes "% used",(c.bytes*100)/a.bytes "% free"
from sys.sm$ts_avail a,sys.sm$ts_used b,sys.sm$ts_free c
where a.tablespace_name=b.tablespace_name and a.tablespace_name=c.tablespace_name;

 

 

 

1.) 向系统表空间中添加数据文件,初始大小为200M,并使该文件为自动扩展,每次扩展20M,最大1G。

ALTERTABLESPACE "SYSTEM" ADDDATAFILE'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\system02'SIZE 200M AUTOEXTENDONNEXT 20M MAXSIZE 1000M

 

2.) 手动增加数据文件的大小300M

Alter databasedatafile‘D:\oracle\product\10.1.0\oradata\orcl\system02’ resize300M

 

3.)使数据文件脱机(联机)

ALTERDATABASEDATAFILE'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM02'OFFLINEonline

 

4.) 修改账户上锁

ALTERUSER "SYSMAN" ACCOUNTLOCK

 

5.) 修改账户解锁

ALTERUSER "SYSMAN" ACCOUNTUNLOCK

 

6.)修改表空间为只读(读写)

ALTERTABLESPACE "USERS" READONLYREAD WRITE

 

7.) 使表空间脱机

ALTERTABLESPACE "USERS" OFFLINENORMAL

 

8.) 关闭数据库文件的自动扩展功能

ALTERDATABASEDATAFILE'F:\SYSAUX02.DBF'AUTOEXTENDOFF

 

9.) 打开数据文件的自动扩展功能

Alter database datafile 'f:\system02.dbf'autoextend on next 100M maxsize 500M

 

 

 

 

 

10.) 当使用sqlplus 执行操作语句的时候,容易出现一个整行的结果,输出却是很多行,这时就需要用几条输出格式的语句加以限制。键入下面三句就可以作限制。

set line 120

col program for a20

set pagesize 25

 

 

11.) 查询数据库中的进程

select spid,username,program,background from v$process where background='1';

 

12.) 查询SGA的大小

show sga   或 select name,round(value/1024/1024,1) "Total MB" from v$sga;

SELECTname,round(bytes/1024/1024,1) "Total MB" from V$sgainfo

 

13.) 查询数据库的SID

select name from v$database;

 

 

 

——查看表大小

SELECT SEGMENT_NAME, SUM(BYTES) / 1024 / 1024 MBYTESE

  FROM USER_SEGMENTS

 WHERE SEGMENT_TYPE = 'TABLE'

   AND SEGMENT_NAME IN

       (SELECT TABLE_NAME

          FROM ALL_TABLES

         WHERE OWNER = 'EDW'

           AND TABLE_NAME LIKE'%L1_DW_FACT_STORE%')

 GROUPBY SEGMENT_NAME

 

14.) 分析表(oracle 强烈建议不要使用analyze(带有compute和estimate子句)来收集统计信息。Oracle提供此功能只是为了实现向后兼容性。但oracle确实支持用analyze语句来进行非统计信息的收集,如验证对象和列出链接行)

exec dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'DEPT',cascade=>true);

 

 

 

---查看有问题的会话

SELECT T.SID,

       T.SERIAL#,

       P.TYPE || '-' || P.ID1 || '-' || P.ID2 AS lock_name,

       d.object_name,

       P.LMODE,

       P.REQUEST,

       P.CTIME,

       P.BLOCK,

       H.SQL_TEXT,

       M.NAME,

       M.WAIT_CLASS,

       N.STATUS,

       Y.USN,

       N.XIDSLOT,

       N.XIDSQN,

       Y.NAME

  FROM V$SESSION T

  LEFTJOIN V$PROCESS F ON T.PADDR = F.ADDR

  LEFTJOIN V$LOCK P ON T.SID = P.SID

  LEFTJOIN V$SQL H ON T.PREV_SQL_ID = H.SQL_ID

  LEFTJOIN V$EVENT_NAME M ON T.EVENT = M.NAME

  LEFTJOIN V$TRANSACTION N ON T.TADDR = N.ADDR

  LEFTJOIN dba_objects d ON p.ID1=d.object_id

  LEFTJOIN V$ROLLNAME Y ON N.XIDUSN = Y.USN

  WHERE t.SID=144OR p.TYPE='TX'OR M.NAME='control file sequential read';

 

 

。。。。。后续接着补充

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