昨天在qq群里看到有人在问同义词的循环链的问题,一时感兴趣,就分析了下。
顾名思义,就是同义词A指向同义词B,而同义词B又指向同义词A,导致死循环。
(1)下面先看一下如何导致同义词的循环链。
以scott用户登录测试库,依次执行下面的代码:
create table t1 (id number,name varchar2(32));
create table t2 (id number,name varchar2(32));
insert into t1 values (1,'t1');
insert into t2 values (2,'t2');
commit;
create public synonym t1 for t2;
create public synonym t2 for t1;
drop table t1;
drop table t2;
--执行下面的语句就会报错:同义词的循环链
SQL> select * from t1;
select * from t1
ORA-01775: 同义词的循环链
SQL> select * from t2;
select * from t2
ORA-01775: 同义词的循环链
(2)分析如何导致上面的错误
首先要知道oracle查找一个对象的步骤:
1、先在自己的对象(user_objects)中查找,若找到,则使用该对象
2、若找不到,则在用户的私有同义词中查找该对象,若找到,则使用该对象
3、若找不到,则在公共同义词里找,若找到,则使用该同义词,若找不到,则报错。
上面的select * from t1会导致oracle在user_objects里查找object_name=t1的对象,发现找不到,接着,oracle会在user_synonyms里查询synonym_name=t1的私有同义词,发现找不到, oracle会接着在dba_synonyms里查找owner=public and SYNONYM_NAME=t1的同义词,发现找到了,然后oracle将上面的sql语句转换为:select * from scott.t2 。然后oracle跑到scott方案里查找object_name=t2
的对象,发现没有,接着,oracle会在user_synonyms里查询synonym_name=t2的私有同义词,发现找不到,接着,oracle又到public synonyms里查找synonym_name=t2的同义词,发现找到了,然后oracle将上面的sql语句转换为:select * from scott.t1。
。。。。。。就这样,无限死循环了,所以oracle报错:同义词的循环链。
同理,下面的select * from t2;原理也是一样的。
昨天在qq群里看到有人在问同义词的循环链的问题,一时感兴趣,就分析了下。顾名思义,就是同义词A指向同义词B,而同义词B又指向同义词A,导致死循环。(1)下面先看一下如何导致同义词的循环链。以scott用户登录测试库,依次执行下面的代码:create table t1 (id number,name varchar2(32));create table t2 (id number
今天刚学习
Oracle
数据库, 学习了创建表、视图、
同义词
、序列、
循环
、判定的基本使用,将今天的完成的作业与大家分享参考一下,如有不足,请批评指正,谢谢了!!!
– 创建雇员表
create table emp(
empno numeric(4) primary key not null,-- 雇员编号
ename varchar2(10),-- 雇员姓名
job varchar2(9),-- 工...
Oracle
中
同义词
是任何表、视图、物化视图、序列、存储过程、函数、包、类型、JAVA类对象、用户定义类型,或是其他的
同义词
的别名。由于其只是一个别名,所以除了在数据字典中的定义不占任何空间。
同义词
常用于安全和方便。例如,它们可以做:
1.伪装对象名称和其所有者。
2.为分布式数据库远程对象提供位置透明性
3.简化数据库用户访问对象SQL语句
4.当行使精细化访问控制时提供类似指定视...
公司服务器周末要加硬盘,周一来后应用连不上了。报错如下 报错:
ORA
-12170:TNS connect timeout occurred
第一反应是监听没开:
1. 测试了一下, 连接超时没用ping 通
C:\Users\Administrator>tnsping brorcl
TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 – Production on 15-6月 -2015 09:45:43
已使用的参数文件
ORA
-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法
在输入以下语句中报了这样的错误:
SQL>alter system set control_files=’/u01/app/
oracle
/
ora
data/prod/
ora
_control1.ctl’,’/u01/app/
oracle
/
ora
data/prod/
ora
_control2.ctl’
scope=spfile;
解决方法:
1.show parameter spfile;
这时候可以看到spfile的valu
SQL> select* from dba_synonyms where table_owner='t1';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK
-------
ORA
-01261和
ORA
-01262是
Oracle
数据库中的错误代码,通常与控制文件相关。
ORA
-01261表示控制文件中的记录已经过时,无法使用。这可能是由于控制文件已经被删除或损坏,或者是由于数据库实例无法访问控制文件。
ORA
-01262表示控制文件中的记录已经被修改,无法使用。这可能是由于控制文件已经被其他进程修改,或者是由于数据库实例无法访问控制文件。
要解决这些错误,可以尝试恢复控制文件,或者使用备份控制文件替换当前的控制文件。还可以检查数据库实例的权限和文件系统的可用空间,以确保数据库实例可以访问控制文件。