1、基本命令:
创建表空间: CREATE TABLESPACE tablespacename DATAFILE 'd:\tablespacename.dbf' SIZE 100m;
创建用户: create user username identified by password default tablespace tablespacename quota 10M on tablespacename ;
授予用户权限: grant DBA to username;
删除用户: drop user username cascade
删除表空间: drop TABLESPACE tablespacename
|
2、删除用户的时候,遇到问题,用户正在使用中,有正在进行中的会话:
--删除用户之前 先锁定用户 alter user username account lock;
--找到当前用户全部的会话id(username--必须全部大写!) SELECT * FROM V$SESSION WHERE USERNAME='username'
--杀掉全部的会话 alter system kill session '211,35901'
--删除用户 drop user username cascade
|
3、导出表结构,与导入表结构:
导出oracle数据库备份: C:\Documents and Settings\lsq>exp zynbdc/ecology@ningbodianchi file=d:\dianchi.dmp full=y(导出的时候不要这个!!)
导入oracle备份文件: imp 用户名/密码@数据库 ignore=y file=备份文件 log=D:\DBtest\db_bak\imp.log 或者 imp username/password file=d:\xxxx full=y
|
4、发现问题,导入的表的数量与导出的数据库中的数量不一致:select count(1) from user_tables;
原因是:11G中有个新特性,当表无数据时,不分配segment,以节省空间 。因此 也就是 exp的时候,没有导出那些行数为0的表。
查看当前用户下面,行数为0的表名:
select table_name from user_tables where NUM_ROWS=0;
解决办法是,设置行数为0的表强制可以导出,设置一个属性,使用下面的语句查询出来全部的表结构,然后在被导出数据库中执行查询结果语句:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
然后再使用3中的语句,进行导出与导入操作。。。
解决方法原文:http://vondon.iteye.com/blog/1316223
5、导入的数据库,发现缺少序列,解决办法很简单,到导出数据库中查询全部的序列:
select 'CREATE SEQUENCE '||t.sequence_name||' minvalue '||t.min_value||' maxvalue'||' '||t.max_value||' increment by '||t.increment_by ||' start with '||(t.last_number)||' nocache order nocycle;' from user_sequences t
在导入数据库中执行查询结果。。。
6、 ORA-01659: unable to allocate MINEXTENTS beyond 1 in tablespace TBS_PSM_B2C
原因是因为数据表空间不够了!
select tablespace_name,file_id,bytes/1024/1024,file_name
from dba_data_files order by file_id;
--下面设置原来的用户,新添加一块表空间文件:
alter tablespace TBS_PSM_B2C add datafile '/oracle/TBS_PSM_B2C1.dbf' size 500M;
--查看现在的表空间的使用情况:
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name
FROM dba_free_space
GROUP BY tablespace_name;
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;