当前位置:文档之家› 表空间创建与删除完整步骤

表空间创建与删除完整步骤

Oracle 10g表空间创建的完整步骤当在数据库中创建用户时,基于应用性能和管理方面的考虑,最好为不同的用户创建独立的表空间。

1.创建表空间不论是Lnux环境,还是Wndows环境,都要首先创建好表空间的存放路径,根据自己的情况修改。

如:/opt/oracle/oradata/cocis 或D:\oracle\oradata\cocis若事先不创建该目录路径,则在创建表空间的时候会出错。

通过pl/sql登录到Oracle数据库上,然后执行菜单:文件/新建/命令窗口,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间引用创建表空间Sql>create tablespace histdb datafile'D:\oracle\product\10.2.0\oradata\orcl\histdb.dbf' size 200m autoextend on next 10m maxsize unlimited;Sql>alter database datafile 'D:\oracle\product\10.2.0\oradata\orcl\histdb.dbf' autoextend on;1) DATAFILE: 表空间数据文件存放路径2) SIZE: 起初设置为200M3) UNIFORM: 指定区尺寸为128k,如不指定,区尺寸默认为64k4) 空间名称histdb 与数据文件名称histdb.dbf 不要求相同,可随意命名.5) AUTOEXTEND ON/OFF 表示启动/停止自动扩展表空间6) alter database datafile ' D:\oracle\product\10.2.0\oradata\orcl\histdb.dbf ' resize 500m; //手动修改数据文件大小为500M删除表空间DROP TABLESPACE histdb INCLUDING CONTENTS AND DATAFILES;表空间已创建。

2.为应用创建用户创建用户的同时,为用户指定缺省的永久表空间和临时表空间。

SQL> create user cocis identified by cocis2 default tablespace cocis3 temporary tablespace temp;用户已创建。

SQL> select username,default_tablespace,temporary_tablespace2 from dba_users3 where username='COCIS';USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE------------------------------ ------------------------------ ------------------ COCIS COCIS TEMPSQL> selectusername,user_id,password,default_tablespace,temporary_tablespace2 from dba_users3 where username='COCIS';USERNAME USER_ID PASSWORD TEMPORARY_TABLESPACE------------------------------ ---------- -----------------------------------------------------COCIS 61 E031F623C0F15D34 COCIS3.权限的授予SQL> grant connect,resource to cocis;授权成功。

注释:当用户创建之后,一般只需要授予CONNECT和RESOURCE这两个角色即可。

若要单独进行授权,则需执行单独的授权命令,如grant create table to cocis;等。

如果要授予SYSDBA的权限给用户则用如下命令SQL> grant SYSDBA to cocis;---------------------------------------------------SQL> revoke unlimited tablespace from cocis;撤销成功。

SQL> alter user cocis quota unlimited on cocis;用户已更改。

注释:为了更严谨的管理,可以回收用户的UNLIMITED TABLESPACE权限,然后对用户的空间限额进行单独授权。

Oracle 使用时间长了,新增了许多user 和tablespace. 需要清理一下对于单个user和tablespace 来说,可以使用如下命令来完成。

步骤一:删除userdrop user ×× cascade说明:删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。

步骤二:删除tablespaceDROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;但是,因为是供开发环境来使用的db, 需要清理的user 和 table space 很多。

思路一:Export出DB中所有的user和tablespace, 筛选出系统的和有用的tablespace,把有用的信息load到一张表中去。

然后写例程循环,把不在有用表的tablespace删掉1. select username,default_tablespace from dba_users;2.create table MTUSEFULSPACE(ID Number(4) NOT NULL PRIMARY KEY,USERNAME varchar2(30),TABLESPACENAME varchar2(60),OWNERNAME varchar2(30));3.declare icount number(2);tempspace varchar2(60);beginfor curTable in (select username as allusr,default_tablespace as alltblspace from dba_users)looptempspace :=curTable.alltblspace;dbms_output.put_line(tempspace);select count(TABLESPACENAME) into icount from MTUSEFULSPACE where TABLESPACENAME = tempspace;if icount=0 thenDROP TABLESPACE tempspace INCLUDING CONTENTS AND DATAFILES; end if;commit;end loop;end;执行后会报如下错误ORA-06550: 第 10 行, 第 5 列:PLS-00103: 出现符号 "DROP"在需要下列之一时:begin case declare exitfor goto if loop mod null pragma raise return select updatewhile with <an identifier><a double-quoted delimited-identifier> <a bind variable> <<close current delete fetch lock insert open rollbacksavepoint set sql execute commit forall merge pipe06550. 00000 - "line %s, column %s:\n%s"*Cause: Usually a PL/SQL compilation error.*Action:好像是被锁了。

没办法,例程不能写,就只能组出语句执行了。

把需要删除的user, tablespace 导出到Excel. 使用CONCATENATE 组出SQL. 贴到SQLdevelop 批量执行。

整个删除会比较耗时间, 100多个user. 用了12个小时左右。

如要找datafile的具体位置,可以使用select , from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;SQL code--删除空的表空间,但是不包含物理文件drop tablespace tablespace_name;--删除非空表空间,但是不包含物理文件drop tablespace tablespace_name including contents;--删除空表空间,包含物理文件drop tablespace tablespace_name including datafiles;--删除非空表空间,包含物理文件drop tablespace tablespace_name including contents and datafiles;--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTSdrop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;。

相关主题