SQL>Select owner,table_name from dba_tables where owner='SYSTEM';结果:
OWNER    TABLE_NAME
SYSTEM   LOGMNR_UID$
SYSTEM   LOGMNR_LOG$
.
.
.
SYSTEM   TB1
SYSTEM   AAA
结果把数据库里所有表的名称都显示出来了,我只想要自己建立的,即只想得到TB1,AAA其他的都不想显示,请问怎么写呢?谢谢

解决方案 »

  1.   

    先弄清楚一个概念:oracle的逻辑结构
    我用一句话概括:谁(用户)的东西(表,视图,索引等)放在哪里(表空间)换句话说
    一张表有自己的主人,即谁拥有了这张表再看,SYSTEM也是一个用户,它有自己的表
    SYSTEM是数据库建好就有的,包含了很多系统的东西
    你不应该用SYSTEM用户建立你自己的应用表,如果你用SYSTEM用户建立了表
    那么你建立的表属于SYSTEM用户
    并非你说:“只想看到自己的表”
    而实际上你的SQL并没有错,的确是“看到了自己的表”也就是SYSTEM自己的表
    因为SYSTEM一出生(数据库建好后)就有很多表了,你只不过又加了一些而已
    它们都是属于SYSTEM的而你在建立自己的数据的时候,应该新建一个自己的用户
    比如
    create user test identified by test;然后授予必要的权限,
    grant connect to test;
    grant resource to test;
    alter user test default tablespace users;然后用test用户连接到数据库
    此时当前用户是test
    再建表
    然后查询 select table_name from user_tables
      

  2.   

    try:Select owner,table_name  from  dba_tables  where  owner='SYSTEM' 
    and tablespace_name='USERS'--加上这个条件试试
      

  3.   

    to popeye627
    跟你说的表空间是没有关系的
    概念不对
      

  4.   

    Select    owner,table_name   from   dba_tables    where   owner='你登录数据库的用户名'; 运行以上语句即可。
      

  5.   

    谢谢大家,
    我确实是把表都放到SYSTEM里了,所以把本来属于SYSTEM的表和自己建立的表都显示出来了.
    我按照1楼说的重新建立了一个用户test,
    有没有什么方法能使我把在SYSTEM用户里建的表移到test里,难道只能是重新用test连接数据库后再在这里建表吗,因为表很多,重新建麻烦,有没有方法使他们都移到test用户里.谢谢
      

  6.   

    可以
    先列一下哪些表是你自己的
    然后 exp userid=system/密码 file=test.dmp tables=(t1,t2,t3,...)
    然后 imp userid=system/密码 fromuser=system touser=test file=test.dmp
      

  7.   

    我把我的代码写下
    sqlplus "SYSTEM/administrator"
    "先列一下哪些表是你自己的"这个是怎么写的?是
    Select owner,table_name from dba_tables where owner='SYSTEM'; 这样不是还是把所有的都列出来了吗?SQL>exp userid=SYSTEM/administrator file=test.dmp tables=(TB1,AAA);
    提示错误"未知的命令开头,exp userid..,忽略了剩余的行"
      

  8.   

    再解释一下
    "先列一下哪些表是你自己的"
    首先SYSTEM是个用户,这个用户在数据库建好的时候就有了,它有自己的一些表
    然后你用SYSTEM登录,建立了"你自己的"表,这里“你自己的”指的是你,不是oracle的用户SYSTEM,此时oracle的用户依然是SYSTEM,从oracle层面来说,“你自己的”都是指SYSTEM由于你把“你自己的”表给了SYSTEM,所以此时“你自己的”表都属于SYSTEM
    你用SYSTEM用户建立的表 OWNER自然是SYSTEM了;Oracle是不知道你的名字的
    它不知道你的名字是meiyu_0707,它只知道SYSTEM用户登录了WHERE OWNER='SYSTEM'自然指的都是SYSTEM的表了明白没?
    Oracle并不知道有一个叫meiyu_0707的人在往SYSTEM用户里添加表所以,你肯定知道SYSTEM用户里,哪些表是你这个人建立的对于oracle来说,哪个人指的是oracle用户,而不是你
    exp命令是在windows的命令窗口执行的,不是SQL语句exp.exe
      

  9.   

    假设SYSTEM用户本来拥有2张表
    TABLE_X
    TABLE_Y然后你用SYSTEM用户登录,又建了2张表如下
    TABLE_1
    TABLE_2我说的”你自己的“就是指你建的TABLE_1和TABLE_2
    而这4张表的OWNER都是SYSTEM虽然你的名字是meiyu_0707,,可是oracle并不认识你
    你登录的时候告诉oracle你的大名是SYSTEM因此你建的表的OWNER当然都是SYSTEM了此时你是没法用owner来列出”你自己的“表的
    只有你自己肉眼去看了,因为所有这些表的owner都是system
    明白吗?
      

  10.   

    sql>desc user_tables;
    sql>select table_name from user_tables;
      

  11.   

    谢谢,你解释的很清楚了,呵呵,我刚学,多谢
    我写下我的运行过程
    开始->运行 输入cmd,回车
    Microsoft Windows [版本 5.2.3790]
    (C) 版权所有 1985-2003 Microsoft Corp.C:\Documents and Settings\Administrator>exp SYSTEM/administrator file=test.dmp tables=(TB1);Export: Release 10.2.0.1.0 - Production on 星期五 1月 11 16:02:26 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的表通过常规路径...
    . . 正在导出表                             TB1导出了          11 行
    EXP-00011: SYSTEM.; 不存在
    导出成功终止, 但出现警告。C:\Documents and Settings\Administrator>imp SYSTEM/administrator fromuser=SYSTEM touser test file=test.dmp;Import: Release 10.2.0.1.0 - Production on 星期五 1月 11 16:04:13 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsIMP-00002: 无法打开 test.dmp; 进行读取
    这是我运行的结果,我哪个地方写错了呢?
      

  12.   

    Microsoft Windows [版本 5.2.3790]
    (C) 版权所有 1985-2003 Microsoft Corp.C:\Documents and Settings\Administrator>exp SYSTEM/administrator file=test.dmp tables=(TB1);
    Export: Release 10.2.0.1.0 - Production on 星期五 1月 11 16:02:26 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的表通过常规路径...
    . . 正在导出表                             TB1导出了          11 行
    EXP-00011: SYSTEM.; 不存在
    导出成功终止, 但出现警告。C:\Documents and Settings\Administrator>imp SYSTEM/administrator fromuser=SYSTEM touser test file=test.dmp;
    Import: Release 10.2.0.1.0 - Production on 星期五 1月 11 16:04:13 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsIMP-00002: 无法打开 test.dmp; 进行读取
    我只写了红色部分
      

  13.   

    楼上的哥们,虽然我不是很懂,不能帮你把问题搞定,
    不过你看人家ATGC 给你讲得那么详细。花了大量时间和精力打字。
    所以以后如果遇到类似的问题也不要偷懒了,因为这是种惰性,对于奋进的人是种阻碍。举个很直白的例子,就是妻子和二奶争夺财产的问题。
    男的死了,结果剩下妻子和二奶,当然二奶没有子女,这种情况下,
    虽然我们知道二奶所住的房子,她一直拥有,但是法律上,二奶是没有继承资格的。
    所以男的死了,二奶再怎么争论,那房子原则上还是不会给她的。
    只有结发的妻子及子女才是合法的继承人。
      

  14.   

    exp SYSTEM/administrator@服务器的名字 file=d:test.dmp tables=(TB1); 
        你这里的system是登陆用户名字,administrator是登陆密码。
    刚才我现研究了一下,你没有服务器的名字,按我上面的写法再试下吧,或许是这原因。
    我按照这个写法,成功导出了。
      

  15.   

    首先确定一下你的TB1表是哪个数据库的SYSTEM用户的表?
    看你的命令只能连接到本地机器的数据库,因此要先查一下你的本地的数据库的SYSTEM用户有没有TB1表如果是远程的机器上的数据库
    则要加上连接名 system/manager@连接名
    这个连接名是在 tnsnames.ora里定义的其次你的imp命令有问题 应该是 touser=test
      

  16.   

    谢谢C:\Documents and Settings\Administrator>exp SYSTEM/administrator file=test.dmp tables=(TB3,TB2);
    Export: Release 10.2.0.1.0 - Production on 星期一 1月 14 14:55:35 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集即将导出指定的表通过常规路径...
    . . 正在导出表                             TB3导出了           4 行
    EXP-00011: SYSTEM.; 不存在
    导出成功终止, 但出现警告。

    C:\Documents and Settings\Administrator>imp SYSTEM/administrator file=test.dmp fromuser=SYSTEM touser=test tables=(TB3,TB2);Import: Release 10.2.0.1.0 - Production on 星期一 1月 14 14:58:55 2008Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    . 正在将 SYSTEM 的对象导入到 TEST
    . . 正在导入表                           "TB3"导入了           4 行
    IMP-00033: 警告: 在导出文件中未找到表 ";"
    成功终止导入, 但出现警告。
    C:\Documents and Settings\Administrator>每次只能导出一个表,这是为什么呢
      

  17.   

    问题解决了,不加";"就对了
    exp   SYSTEM/administrator   file=test.dmp   tables=(TB3,TB2)imp   SYSTEM/administrator   file=test.dmp   fromuser=SYSTEM   touser=test   tables=(TB3,TB2)谢谢大家