zoukankan      html  css  js  c++  java
  • oracle的默认表空间

    一.默认表空间说明

    在oracle9i中,如果未用 DEFAULT TABLESPACE 子句创建的所有用户将以SYSTEM表空间作为它们的默认表空间。同时也不能为数据库指定一个默认的表空间。

    在Oracle 10g中定义了数据库级别的默认表空间USERS,在创建用户时没有定义默认表空间,就会把数据库级别的默认表空间当作自己的默认表空间。

    在10g以前,是把系统表空间(SYSTEMS)当作默认表空间。这样很不合理。

                可以使用如下命令查看默认表空间:

     

    [sql] view plaincopy
     
    1. /* Formatted on 2011/12/19 15:57:48(QP5 v5.185.11230.41888) */  
    2. SELECT PROPERTY_VALUE  
    3.   FROM database_properties  
    4.  WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE'  


    可以使用如下命令修改默认表空间:

    ALTER DATABASE DEFAULT TABLESPACE users;

     

    这里有几个注意事项:

    1.     如果我们在创建用户时指定了默认表空间,那么在修改默认表空间后,之前用户的默认表空间也会发生改变。

    2.     如果我们在创建用户时没有指定用户表空间,那么默认也会使用DB的默认表空间,这时候如果我们修改了DB的默认表空间,用户的表空间也会发生改变。

    3.     如果我们在创建用户指定用户的表空间是其他的表空间,那么我们修改DB的默认表空间不会影响用户的表空间。

    4.     DB的默认表空间不能删除,除非将默认表空间指向其他表空间之后才可以删除。

    5.     如果用户的默认表空间指向其他的表空间,当这个表空间被drop 之后,用户的默认表空间会自动指向DB的默认表空间。

    二.示例

    2.1查看DB 版本:

    SQL> select * from v$version;

    BANNER

    -----------------------------------------------------------------------

    Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - Production

    PL/SQL Release 11.2.0.1.0 - Production

    CORE   11.2.0.1.0      Production

    TNS for 32-bit Windows: Version 11.2.0.1.0- Production

    NLSRTL Version 11.2.0.1.0 - Production

    2.2查看当前的默认表空间

    SQL> SELECT PROPERTY_VALUE

     2    FROM database_properties

     3   WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE';

    PROPERTY_VALUE

    -------------------------------------------------------------

    USERS

    2.3 创建用户,不指定默认表空间

    SQL> create user dave1 identified bydave1;

    User created.

    SQL> select default_tablespace from dba_users where username ='DAVE1';

    DEFAULT_TABLESPACE

    ------------------------------

    USERS

    --默认表空间为users。

    2.4 创建用户指定默认表空间为DB的默认表空间

    SQL> create user dave2 identified by dave2 default tablespace users;

    User created.

    SQL> select default_tablespace fromdba_users where username ='DAVE2';

    DEFAULT_TABLESPACE

    ------------------------------

    USERS

    2.5 创建用户指定的默认表空间为其他表空间

     --创建表空间:

    SQL> create tablespace dave3 datafile'D:APPADMINISTRATORORADATANEWCCSdave3.dbf' size 10M;

    Tablespace created.

    --创建用户:

    SQL> create user dave3 identified by dave3 default tablespace dave3;

    User created.

    SQL> select default_tablespace from dba_users where username ='DAVE3';

    DEFAULT_TABLESPACE

    ------------------------------

    DAVE3

    2.6 修改DB的默认表空间

    SQL> ALTER DATABASE DEFAULT TABLESPACEdave3;

    Database altered.

    2.7 查看之前创建用户的表空间

    SQL> select default_tablespace from dba_users where username ='DAVE3';

    DEFAULT_TABLESPACE

    ------------------------------

    DAVE3

    SQL> select default_tablespace fromdba_users where username ='DAVE2';

    DEFAULT_TABLESPACE

    ------------------------------

    DAVE3

    SQL> select default_tablespace fromdba_users where username ='DAVE1';

    DEFAULT_TABLESPACE

    ------------------------------

    DAVE3

    --注意这里Dave1,dave2用户的默认表空间都变成了dave3.

    2.8 DB的默认表空间不能删除

    --现在dave3是我们的默认表空间

    SQL> SELECT PROPERTY_VALUE

     2    FROM database_properties

     3   WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE'

     4  ;

    PROPERTY_VALUE

    ----------------------------------------------------------

    DAVE3

    --drop dave3 看看:

    SQL> drop tablespace dave3 includingcontents and datafiles;

    drop tablespace dave3 including contentsand datafiles

    *

    ERROR at line 1:

    ORA-12919: Can not drop the defaultpermanent tablespace

    这里报错ORA-12919.

    我们把默认表空间改成USERS,在测试:

    SQL> ALTER DATABASE DEFAULT TABLESPACEUSERS;

    Database altered.

    SQL> drop tablespace dave3 including contents and datafiles;

    Tablespace dropped.

    Dave3表空间成功drop。 注意,我们的dave3用户的表空间之间是指向dave3的,现在我们把dave3表空间drop了,我们看一下dave3 现在默认表空间:

    SQL> select default_tablespace from dba_users where username ='DAVE3';

    DEFAULT_TABLESPACE

    ------------------------------

    USERS

    --这里自动变成了我们的DB 默认的表空间。

      DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,这个用户就会采用默认的表空间——users表空间(sys和system等系统用户采用的默认表空间是system表空间),DBA有办法避免这种问题了——在线指定系统默认表空间:

        ALTER DATABASE DEFAULT TABLESPACE <tsname>;

        通过执行以上命令,可以设定系统的默认表空间。这样的话,在创建新用户时,如果不指定他的默认表空间,就会采用上面指定的系统默认表空间作为这个用的默认表空间。

    SQL>conn /as sysdbaSQL> create user zhangsan identified by zhangsan default tablespace myspace1;

    用户已创建。SQL> alter database default tablespace myspace;

    数据库已更改。

    SQL> create user test identified by test;

    用户已创建。

    SQL> select username, default_tablespace defspace from dba_users where username='TEST';

    USERNAME                       DEFSPACE

    --------------                 ----------------

    TEST                           MYSPACE

        然而一旦将系统默认表空间修改了以后,原有的所有普通用户的默认表空间都会被指定为这个表空间,如上例中test1,创建时指定了他的默认表空间为myspace1,执行了’alter database default tablespace myspace’后,他的默认表空间也被改为了myspace。

    SQL> select username, default_tablespace defspace from dba_users where username='TEST1';

    USERNAME                       DEFSPACE

    --------------                 ----------------

    TEST1                          MYSPACE

  • 相关阅读:
    map & reduce
    Generator
    切片
    函数参数
    Dict & Set
    list,tuple
    selenium鼠标和键盘操作
    selenium元素定位以及点击事件
    css定位
    xpath
  • 原文地址:https://www.cnblogs.com/jichunhu/p/4063211.html
Copyright © 2011-2022 走看看