这里是平时的开发过程中自己记录的一些常用命令及开发技巧,在此建立自己的知识库,便于以后查询;
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把导出的数据导入
其中 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'OFFLINE(online)
4.) 修改账户上锁
ALTERUSER "SYSMAN" ACCOUNTLOCK
5.) 修改账户解锁
ALTERUSER "SYSMAN" ACCOUNTUNLOCK
6.)修改表空间为只读(读写)
ALTERTABLESPACE "USERS" READONLY(READ 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';
。。。。。后续接着补充