职位关键字 工作地点
工作名称 公司名称 校园招聘
中国最好的工作搜索引擎!
  回复留言  
  小弟对表空间概念不是很理解,请指教
作者: W3614031  01-01 08:00   回复  
 CREATE TABLESPACE message

DATAFILE '/opt/oracle/oradata/surecomp/message01.dbf' size 200M

EXTENT MANAGEMENT local;





CREATE USER message IDENTIFIED BY message

DEFAULT TABLESPACE message;



GRANT connect, resource TO message;



CREATE TABLE userinfo (

id VARCHAR2(32) NOT NULL,

name VARCHAR2(32) NOT NULL,

password VARCHAR2(32) NOT NULL,

CONSTRAINT userinfo_pk PRIMARY KEY (id),

CONSTRAINT userinfo_unique_name UNIQUE ( name )

);



这里先是用SYSTEM用户创建了一个message表空间

然后创建一个用户message,使这个message用户默认使用message表空间

之后创建一个表USER,这个时候USER表是不是应该在SYSTEM的临时表空间里?

那下次用message登陆往USER表中插记录的时候记录是不是就存在message表空间中?

SYSTEM表空间是不是只存了USER表的逻辑?

概念不清请指教

  回复:小弟对表空间概念不是很理解,请指教
作者: ohmi  01-01 08:00   回复  
 当你用system创建了message表空间,和message用户后,如果你不从system用户退出,再以message用户登陆,那么,运行以上创建表的指令,所创建的表userinfo,就会被system用户所拥有。所以,这个表应该在system表空间里。在这样的情况下,用户message与这张表没有任何关系。下次用message登陆时,message在一般情况下,不能往userinfo表里插记录,除非system给予message用户特别许可,(GRANT insert on system.userinfo TO message;)。如果system给予了这种许可,用户message所插的一切记录,都会储存在system表空间里,而不是在message表空间中。



显然,这是很糟糕的情况。一般情况下,应该避免让普通用户把数据储存在system表空间里。现有二种方法可以避免以上的情况:



1.从system用户退出,再以message用户登陆,然后运行以上创建表的指令。



2.依然是system用户登陆,修改上述创建表的指令。在表名前,加上用户名,并且在最后注明表空间名。请看下例:



CREATE TABLE message.userinfo

(

id VARCHAR2(32) NOT NULL,

name VARCHAR2(32) NOT NULL,

password VARCHAR2(32) NOT NULL,

CONSTRAINT userinfo_pk PRIMARY KEY (id),

CONSTRAINT userinfo_unique_name UNIQUE ( name )

)

TABLESPACE message;



用上述二种方法所创建的表userinfo,都会属于用户message。因此,message所插的一切记录,都会储存在message表空间中。

标 题:
内 容:
用户名:
 游客
 
 
Copyright©2005-2007, 版权所有 WWW.JOBMET.COM
ICP证:京ICP备06019556号