Misc Notes

记点Oracle的东西

表空间用户相关的东西

遇到一个删除表空间失败的情况,先删用户,再删表空间:

1
2
drop user xxx cascade;
drop tablespace xxx including contents and datafiles;

建表空间:

1
2
3
4
5
create tablespace XXX
datafile 'D:\Data\oradata\orcl\XXX.DBF' size 50M
autoextend on
next 10M
extent management local;

建用户:

1
2
3
create user XXX identified by xxx
default tablespace XXX
temporary tablespace TEMP;

给用户赋权:

1
grant connect, resource, dba to xxx;

有一次把表空间文件给删了,但是表空间还在,得想办法把表空间删掉:

1
alter database datafile 'XXX' offline drop;

非常简单的一句

下面是关于Oracle 11g导出空表的方法

Oracle 11g开始,exp的时候,默认情况下是不会导出无数据的空表的,这时候要分两部分解决,其一修改设置,让以后建立的新表都能导出空表,另外一个则是对已有的数据表进行设置,具体做法如下:

1、设置deferred_segment_creation 参数

查看当前设置:

1
show parameter deferred_segment_creation

修改参数:

1
alter system set deferred_segment_creation=false;

2、处理已有的空表:

先找到所有的空表:

1
select table_name from user_tables where NUM_ROWS=0;

把结果存到一个临时表里:

1
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

把查询结果作为语句执行一遍就O了。