通过修改基表(link$)让非public dblink变为public

有些朋友创建了一个非public的dblink,现在该数据库的其他用户需要去使用该dblink,在正常情况下无访问权限,需要重新建一个dblink,或者将原dblink修改为public。但是由于忘记了原dblink的目标段的密码,使得创建或者修改dblink的步骤无法进行下去。这里通过修改基表(link$),解决该问题。

创建dblink

SQL> show user;
USER is "SYS"
SQL> create database link "xff_dblink"
  2  connect to TEST
  3  identified by "test"
  4  using ‘11.1.1.1:1521/mcrm‘;

Database link created.

SQL> select * from dba_db_links where db_link like ‘XFF_DBLINK%‘;

OWNER DB_LINK                                     USERN HOST               CREATED
----- ------------------------------------------- ----- ------------------ --------
SYS   XFF_DBLINK.REGRESS.RDBMS.DEV.US.ORACLE.COM  TEST  11.1.1.1:1521/mcrm 29-MAR-12

SQL> select sysdate from dual@xff_dblink;

SYSDATE
---------
29-MAR-12

SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
SELECT SYSDATE FROM DUAL@XFF_DBLINK
                         *
ERROR at line 1:
ORA-02019: connection description for remote database not found
--该dblink不是public的,所以test用户无权访问

dblink变为public类型

SQL> CONN / AS SYSDBA
Connected.
SQL> set long 1000
SQL> select  text from dba_views where view_name=‘DBA_DB_LINKS‘;

TEXT
-------------------------------------------------------------------
select u.name, l.name, l.userid, l.host, l.ctime
from sys.link$ l, sys.user$ u
where l.owner# = u.user#
--查询出dblink相关的基表有link$和user$

SQL> desc sys.link$
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 OWNER#                        NOT NULL NUMBER
 NAME                          NOT NULL VARCHAR2(128)
 CTIME                         NOT NULL DATE
 HOST                                   VARCHAR2(2000)
 USERID                                 VARCHAR2(30)
 PASSWORD                               VARCHAR2(30)
 FLAG                                   NUMBER
 AUTHUSR                                VARCHAR2(30)
 AUTHPWD                                VARCHAR2(30)
 PASSWORDX                              RAW(128)
 AUTHPWDX                               RAW(128)

SQL> select owner# from sys.link$ where name like ‘XFF_DBLINK%‘;

    OWNER#
----------
         0
--XFF_DBLINK对应的用户标识记录在link$.owner#中

SQL> SELECT USER#,NAME FROM USER$ WHERE name in (‘SYS‘,‘PUBLIC‘);

     USER# NAME
---------- ------------------------------
         1 PUBLIC
         0 SYS
--现link$.owner#值为0,表示该dblink所属用户为SYS,现在让该dblink变为public
--现需要让该dblink变为public,需要做的是修改link$.owner#的值为1

SQL> UPDATE LINK$ SET OWNER#=1 WHERE name like ‘XFF_DBLINK%‘;

1 row updated.

SQL> COMMIT;

Commit complete.

--需要刷新shared_pool
SQL> ALTER SYSTEM FLUSH SHARED_POOL;

System altered.

--查看dblink所属者,已经修改为public
SQL> select owner from dba_db_links where db_link like ‘XFF_DBLINK%‘;

OWNER
----------
PUBLIC

--测试dblink是否成功
SQL> CONN TEST/TEST
Connected.
SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;

SYSDATE
---------
29-MAR-12
时间: 2024-10-11 07:17:52

通过修改基表(link$)让非public dblink变为public的相关文章

第三次博客作业package com.fry; //导入java.util.Arrays; import java.util.Arrays; public class Demo1 { public static void main(String[]args){ //创建对象,对象名为hello Demo1 hello =new Demo1(); //调用方法并将返回值保存在变量中

1.  某网站管理系统,用户注册时,电话号码为可选输入项,输入格式为:区号-电话号码—分机号,中间用“-”隔开.以下为jsp页面上的设计,且并未对输入做任何控制. 假设系统现在需要取出中间的电话号码部分,代码如下: /** * * 该方法根据用户输入取出中间的电话号码部分 * @param strPhoneNum 电话号码,如:“0591-83279988—002” * @return 返回号码部分,如:“83279988” */ public String getPhoneNumber(Str

构造方法时 加public与不加public的区别问题

这个类都不是public的 也就是其他包没法访问你这个类 但你的构造方法却是public的 又让其他的包下的类可以创建你这个类的对象 明显就有矛盾 所以肯定会有问题,其次 构造方法加public主要是为了让其他包下的类去访问,如果在同一个包中 这个就没啥大区别了,毕竟默认修饰的话 是包级访问,包以外的没法访问 要访问需要加上public. 有一点点区别,加了public就是公告可以继承没有加就是默认的protected,是有限制的,不过一般构造方法不是很关注这块,构造方法主要是为创建事例而准备,

Jenkins修改域认证,非域用户忘记密码处理

一.认证域地址修改 1. 编辑配置文件 vi $JENKINS_HOME/jenkins/config.xml 2.修改如下内容: <securityRealm class="hudson.security.LDAPSecurityRealm" plugin="[email protected]"> <server>ldap://$<LDAP_HOST_IP></server> //修改此处的ip <rootDN

在java中public void与public static void区别

static 方法可以被main方法直接调用,而非static方法不可以.因为static方法是属于类的,是类方法.可以通过类名.方法名直接调用.而非static方法必须等对象被new出来以后才能使用,因而不能在main中直接调用. public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用:public static void 修饰是静态方法,属于类,使用类名.方法名直接调用. Java 可以通过对象名调用静态方法(对象名.静态方法).Ja

public void与public static void区别

我们换个简单易懂的说法,这两句的区别就在于,能不能直接用类名访问. 很好理解的不是吗? 假如,我有一个类,如下图所示: 接下来先实例化一个对象,ca,你会发现它不仅可以访问普通的方法,也可以访问静态的方法 那这又有什么用呢?如果每次我用一个类的方法之前我都要实例化一下这个类,那么无疑是对内存资源的浪费.于是乎,静态方法就带来了便利,如下图所示: 原文地址:https://www.cnblogs.com/yrxns/p/8793703.html

模拟业务最小测试用例02

Oracle数据库对很多开发人员而言,基本就只是一个存储数据的仓库,只不过这个仓库功能非常强大,额外提供了很多好用的功能,需要的时候会用就好,不会纠结于某个细节.而对很多DBA而言,正好相反,喜欢沉溺于某些细节上,对某些小知识点对应的原理理解的非常透彻,但却往往很少会站在开发层面认识Oracle. 本文旨在构造一份相对较全面的测试数据,对开发常用的对象都模拟创建一份测试用例,DBA就可以直接拿去做一些基本测试. 环境:Oracle 11.2.0.4 1.初始化测试数据 2.清空测试数据 1.初始

oracle10g rac 零宕机修改public ip&amp;vip

先修改1节点的 1.修改ocr中public的信息 [[email protected] ~]$ oifcfg delif -global eth0 [[email protected] ~]$ oifcfg setif -global eth0/172.168.1.0:public [[email protected] ~]$ oifcfg getif eth0 172.168.1.0 global public eth1 192.168.1.0 global cluster_intercon

oracle 创建dblink

CREATE database link test_dblinkCONNECT TO sjzx IDENTIFIED BY sjzxUSING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.176.150.201)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl) ))'; database link概述 database link是定义一个数据

expdp 只导出dblink

最近生产数据库要修改生产用户的密码,由于用户密码修改,各个库之间创建的dblink就失效了,需要重建.上生产一看dblink还真不少,而且谁建的都有,改起来比较费劲.于是想到可以使用expdp的方式导出所有的dblink,即可获取dblink的创建语句,然后修改原密码再在库上创建就可以了. 生产环境中的库有两个版本10.2.0.4和11.2.0.3下面分别在10g和11g上做测试 测试10g: SQL> select * from v$version; BANNER --------------