[20150430]同义词使用问题.txt

简介: [20150430]同义词使用问题.txt SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -...

[20150430]同义词使用问题.txt

SCOTT@test> @ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.3.0     Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

SCOTT@test> desc tt
ERROR:
ORA-04043: object tt does not exist

SCOTT@test> create synonym syn_public_tt1 for tt;
Synonym created.

SCOTT@test> create synonym syn_public_tt2 for syn_public_tt1;
Synonym created.

--居然可以建议同义词.

SCOTT@test> select * from syn_public_tt1;
select * from syn_public_tt1
              *
ERROR at line 1:
ORA-00980: synonym translation is no longer valid

SCOTT@test> host oerr ora 980
00980, 00000, "synonym translation is no longer valid"
// *Cause: A synonym did not translate to a legal target object. This
//         could happen for one of the following reasons:
//         1. The target schema does not exist.
//         2. The target object does not exist.
//         3. The synonym specifies an incorrect database link.
//         4. The synonym is not versioned but specifies a versioned
//            target object.
// *Action: Change the synonym definition so that the synonym points at
//          a legal target object.


SCOTT@test> create table tt as select * from dept ;
Table created.

SCOTT@test> select * from syn_public_tt1;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS1
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SCOTT@test> select * from syn_public_tt2;
    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS1
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

--这个问题非常讨厌,如果不小心把表删除了,而对应的同一词依旧存在.
SCOTT@test> drop table tt purge;
Table dropped.

SCOTT@test> select *  from dba_synonyms where owner='SCOTT';
OWNER  SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME     DB_LINK
------ ------------------------------ ------------------------------ -------------- --------------------
SCOTT  SYN_PUBLIC_TT1                 SCOTT                          TT
SCOTT  PRODUCTS                       SH                             PRODUCTS
SCOTT  SYN_PUBLIC_TT2                 SCOTT                          SYN_PUBLIC_TT1

--也没有办法标识是否有效.而且麻烦的是同义词可以定义同义词的同义词,这样定位脚本要写的有点复杂,要进行一些递归.

SCOTT@test> column table_name format a20
SCOTT@test> select *  from dba_synonyms where owner='SCOTT' and (table_owner,table_name) not in (select owner,table_name from dba_tables);
OWNER  SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME           DB_LINK
------ ------------------------------ ------------------------------ -------------------- --------------------
SCOTT  SYN_PUBLIC_TT1                 SCOTT                          TT
SCOTT  SYN_PUBLIC_TT2                 SCOTT                          SYN_PUBLIC_TT1

--视乎这样是对的,如果我建立表tt呢?
SCOTT@test> create table tt as select * from dept ;
Table created.

SCOTT@test> select *  from dba_synonyms where owner='SCOTT' and (table_owner,table_name) not in (select owner,table_name from dba_tables);
OWNER  SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME           DB_LINK
------ ------------------------------ ------------------------------ -------------------- --------------------
SCOTT  SYN_PUBLIC_TT2                 SCOTT                          SYN_PUBLIC_TT1

--很明显这个脚本存在问题.

SELECT *
  FROM dba_synonyms
WHERE     owner = 'SCOTT'
       AND (table_owner, table_name) NOT IN (SELECT owner, table_name
                                               FROM dba_tables)
       AND (table_owner, table_name) NOT IN (SELECT owner, synonym_name
                                               FROM dba_synonyms);

SCOTT@test> create synonym syn_public_tt3 for syn_public_tt2;
Synonym created.

SCOTT@test> drop  synonym syn_public_tt1 ;
Synonym dropped.


SELECT *
  FROM dba_synonyms
WHERE     owner = 'SCOTT'
       AND (table_owner, table_name) NOT IN (SELECT owner, table_name FROM dba_tables)
       AND (table_owner, table_name) NOT IN (SELECT owner, synonym_name FROM dba_synonyms);

OWNER  SYNONYM_NAME                   TABLE_OWNER                    TABLE_NAME           DB_LINK
------ ------------------------------ ------------------------------ -------------------- --------------------
SCOTT  SYN_PUBLIC_TT2                 SCOTT                          SYN_PUBLIC_TT1

--^_^,又漏掉了SYN_PUBLIC_TT3,好在这种级联定义应该不会太多.
--写sql语句不是我的强项.估计要使用connect by之类的东西.

--这个问题,我最近在整理一个数据库,里面无效的同义词太多.这才有上面的测试.还好开发一般不会选择定义同义词的同义词.删除这些
--无效的同义词还是很容易的.

目录
相关文章
|
SQL 测试技术 索引
[20180509]函数索引问题.txt
[20180509]函数索引问题.txt https://jonathanlewis.wordpress.com/2018/05/07/fbis-dont-exist/ --//重复测试: 1.
1095 0
|
关系型数据库 Linux 索引
[20180212]函数索引问题.txt
[20180212]函数索引问题.txt --//11g下,如果函数索引,字段出现重复,出现ORA-54015: Duplicate column expression was specified.
981 0
|
关系型数据库 数据库管理 Oracle
[20180208]ezconnect语法.txt
[20180208]ezconnect语法.txt --昨天看书Oracle Database11g DBA Handbook.pdf,Using Easy Connect Naming P561.
1055 0
|
Oracle 关系型数据库 数据库
[20171218]字段命名与oracle关键字.txt
[20171218]字段命名与oracle关键字.txt --//再次提醒开发应该在数据库字段命令上避开oracle关键字(保留字).避免出现混乱. SCOTT@book> @ &r/ver1 PORT_STRING         ...
926 0
|
SQL Shell 测试技术
[20161023]为什么以前可以这样的表.txt
[20161023]为什么以前可以这样的表.txt --上午看https://oracleblog.org/working-case/ora-01401-impdp-same-character/ CREATE TABLE ASS_ACC...
774 0
|
SQL Oracle 关系型数据库
[20150803]使用函数索引注意的问题.txt
[20150803]使用函数索引注意的问题.txt --昨天在10g下优化时遇到一个奇怪的问题,做一个记录: --首先说明一下,最近一段时间在做一个项目的优化,这个项目实际上ETL项目: http://baike.
842 0
|
机器学习/深度学习 Java 数据库
[20150604]关于同义词的问题3.txt
[20150604]关于同义词的问题3.txt --前一阵子对服务器的同义词做了一些整理,参考链接: http://blog.itpub.net/267265/viewspace-1621290/ http://blog.itpub.net/267265/viewspace-1612866/ --但是我在检查sys.obj$时发现我好像并没有删除这些同义词。
709 0
|
SQL 数据库 Shell
[20150503]关于同义词问题2.txt
[20150503]关于同义词问题2.txt --节前在做数据库同义词整理时,写了一篇blog --[20150430]同义词使用问题.txt http://blog.
797 0
|
索引
[20150321]索引空块的问题.txt
[20150321]索引空块的问题.txt --晚上看了: 索引空块较多造成index range scan的IO成本较高 http://www.dbaxiaoyu.
736 0
|
Oracle 关系型数据库 测试技术
[20150314]256列.txt
[20150314]256列.txt --oracle 当1个表超过256列时,要分成几个行片(row pieces),昨天看链接: https://jonathanlewis.
816 0