1. 你概念没对,不是在表空间上建用户,而是允许用户使用哪个表空间。
2. 你权限没弄对,DBA是最高权限,已经包括connect了。有了DBA权限,整个数据库你就随便搞了。
3. 想查询就通过通过select * from lis.table1来查询。不想总是写一个lis.就建立同义词。
4. 你都有dba权限了,可以建public同义词。这样你的任何用户都可以不用Lis.直接访问那个表了。
select * from table1
但是如果你当前的用户下有同名的表,那么这句话访问的就是你当前用户下的表。一般不要建public,下面这是私有的。
创建方法:
create synonym guest.lccont for lis.lccont
5. 怎么全部重建。这个问题很简单,你拼一个赋权语句就可以了。
select 'create synonym '||table_name||' for lis.'||table_name||';' from dba_tables where owner='LIS';
你把上面这句话的执行结果拷贝出来,执行一遍就全建完了。如果你会不停的创建表,你干脆写个批处理让它自己跑好了。
6. 再一问题就是,如果guest表中已经有lbcont这个表了,
再执行create or replace synonym guest.lbcont for lis.lbcont;就报错了。
那当然了,要不然重名了,你访问这个表的时候怎么知道你访问的是这个表还是同义词。
这个问题无解。
除非建public同义词,那样再访问的话访问的就是你当前用户下的表,而非同义词。
补充:
2搂没对,同义词关db link 什么事?
在lis用户下,对guest可以访问的表附select权限
grant select on lccont to GUEST