• oracle跨数据库


    1. Oracle如何实现跨数据库查询

    网络连通的情况下,可以使用DBLink

    用户名identifiedby密码using
    '(DESCRIPTION=
    (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.111)(PORT=1521))
    )
    (CONNECT_DATA=
    (SERVICE_NAME=实例名)
    )
    )';

    --查询的时候直接使用
    select*from用户名.表名@db1;

    2. 数据库oracle的夸跨库连接怎么弄,要注意什么

    分布式查询可能一条SQL语句中有不同远程库的表,相关概念lz可以网上查找,使用时注意下面几点。

    1. 使用collocated内联视图—也就是sql要对引用不同远程库的表,要组织好,将相同库的表放一起组织成内联视图,这样oracle就很容易知道这个内联视图里的表是在同一远程库作完查询
      后再返回给本地库,这样减少了本地库与远程库的交互次数和传输结果集的数量和次数。

    2. 了解cbo优化器对分布式查询的处理(cbo也是尽量转为collocated内联视图),它可能是不高效的,这时候得用其他的方法,比如使用HINT,改造SQL,改造分布式查询的方法(远程库用视图)等

    3. 使用hint,特别是driving_site hint(如:parallel,use_hash,full等,它能指定执行计划在远程还是本地做),特别是本地小结果集,远程大结果集的时候,总体结果集较小,希望计划在远程驱动,这样远程执行完毕,将结果集传输到本地,这样避免大结果集的传输。

      lz还要学会看执行计划,这很重要,有问题再追问。

    3. oracle跨库操作

    是可以的,方法很多。我就说几种比较常用的方法吧。
    1、在程序中实现:如 java 语言, 使用JDBC在B上连接C的数据库.需要用到如下参数
    Driver : oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:C的iP:1521:orcl
    username : 连接数据库的用户名
    password: 密码

    2、在B上使用工具 如(PLSQL Developer )
    先在B上使用 oracle 的 net configuration assistant 工具(安装完ORACLE后就有)配置C的数据库连接,然后用 PLSQL Developer 连接就可以了 注意 数据库这一栏要填刚才配置的别名 不是本地的数据库名

    4. oracle跨数据库统计问题

    A视图和b表示一一对应的嘛?
    有没有可能一个项目号对应多个记帐号?

    你说的直接统计c表:

    直接统计select sum(金额)from c where 记账类型=k and 日期=XXX

    具体怎么统计的?你怎么知道远远大于?
    你是直接统计的C表总数?

    还有一种可能是你执行第一次查询和第二次查询中间表的数据发生了变化。

    5. PL/SQL怎么建立跨库(ORACLE)

    Oracle dblink详解

    Oracle日常管理

    database link概述
    database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。
    在创建database link的时候,Oracle再数据字典中保存相关的database link的信息,在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据库以完成相应的工作。
    建立database link之前需要确认的事项:
    确认从local database到remote database的网络连接是正常的,tnsping要能成功。
    确认在remote database上面有相应的访问权限。
    database link分类
    类型Owner描述

    Private 创建database link的user拥有该database link 在本地数据库的特定的schema下建立的database link。只有建立该database link的schema的session能使用这个database link来访问远程的数据库。同时也只有Owner能删除它自己的private database link。
    Public Owner是PUBLIC. Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库。
    Global Owner是PUBLIC. Global的database link是网络级的,When an Oracle network uses a directory server, the directory server automatically create and manages global database links (as net service names) for every Oracle Database in the network. Users and PL/SQL subprograms in any database can use a global link to access objects in the corresponding remote database.
    Note: In earlier releases of Oracle Database, a global database link referred to a database link that was registered with an Oracle Names server. The use of an Oracle Names server has been deprecated. In this document, global database links refer to the use of net service names from the directory server.
    创建dblink所需的权限
    PrivilegeDatabaseRequired For

    CREATE DATABASE LINK Local Creation of a private database link.
    CREATE PUBLIC DATABASE LINK Local Creation of a public database link.
    CREATE SESSION Remote Creation of any type of database link.
    database link的使用
    基本语法
    CREATE [SHARED][PUBLIC] database link link_name
    [CONNECT TO [user][current_user] IDENTIFIED BY password]
    [AUTHENTICATED BY user IDENTIFIED BY password]
    [USING 'connect_string']
    说明:
    1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
    2)link : 当source端的数据库GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。
    3)current_user使用该选项是为了创建global类型的dblink。在分布式体系中存在多个数据库的话。如果想要在每一个数据库中都可以使用同样的名字来访问数据库a,那在每个数据库中都要创建一个到数据库a的db_link,太麻烦了。所以现在有这个选项。你只要创建一次。所有的数据库都可以使用这个db_link来访问了。要使用这个特性,必须有oracle nameserver或者ORACLE目录服务器。并且数据库a的参数global_names=true.具体我也没有创建过,没有这个环境。
    4)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串,也可以在创建dblink的时候直接指定。
    5)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库,当创建connected user类型的dblink时,需要如果采用数据字典验证,则需要两边数据库的用户名密码一致。
    创建database link选项说明
    取值说明

    不指定 默认值建立一个dedicated的连接,每一个使用database link的本地session都会对应有一个远程数据库的session。
    SHARED 创建一个共享的数据库连接,同时要指定database link_authentication。
    使用shared方式的 database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。在使用shared database link的时候,到database link的连接会在连接以后与本地连接断开,为防止未授权的session使用此链接而要求在创建shared database link的时候必须要指定database link_authentication。
    (from Oracle document: A shared database link is a link between a local server process and the remote database. The link is shared because multiple client processes can use the same link simultaneously.)
    共享链接更多资料
    共享数据库链接是指该链接的多个用户可以共享同一个底层网络连接。例如,在有四位用户的MTS(多线程服务器)环境下,每一个共享服务器进程都将与远程服务器有一个物理链接,这四位用户共享这两个链接。
    表面上,共享链接乍一听起来像是一件好事。在某些环境下的确如此,但是,当你考虑使用共享链接时,应当意识到这有许多局限性和警告:
    如果你使用一个专用的服务器连接来连接到你的本地数据库,链接只能在你从那些连接中创建的多重会话间共享 。在MTS环境里,每一个共享服务器进程潜在地打开一个链接。所有的会话被同一共享服务器进程提供并且分享被那个进程打开的任意共享链接。因为在MTS环境里的一个共享服务器进程能够服务于许多用户连接,共享链接的使用可能导致打开的链接远多于所必须的链接。用SHARED关键字建立共享数据库链接。还必须使用AUTHENTICATED BY 子句在远程系统上指定一有效的用户名和口令。如下命令建立一个共享的、公用的、连接用户数据库链接:
    CREATE SHARED PUBLIC database link GNIS
    AUTHENTICATED BY DUMMY_USER IDENTIFIED BY SECRET
    USING ‘GNIS’;
    要获得创建链接和管理分布式系统的更多资料,请查阅Oracle Technology Network (http://otn.oracle.com/)。
    使用AUTHENTICATED BY子句稍微有些困扰,但是由于实现共享链接的方式安全性决定它是必须的。这个例子中的用户名和口令DUMMY_USER/SECRET必须在远程系统上有效。然而,远程系统上使用的帐户仍就是连接用户的帐户。如果我以JEFF/SECRET登陆到我的本地数据库并使用我刚建好的共享链接,将会发生以下一系列事件:
    为了打开链接,Oracle使用DUMMY_USER/SECRET向远程数据库授权。然后,Oracle试图使用HMAD/SECRET使我登陆到远程数据库。共享链接的主要目的是减少两个数据库服务器之间的底层网络连接数量。它们最适合于MTS环境,在那你拥有大量的通过这一链接访问远程数据库的用户。观念上,你想让用户数量超过共享服务器进程的数量。那么你可以通过为每一共享服务器进程打开一个链接而不是每位用户打开一个链接的方法,节省资源。
    database link使用方式
    取值说明

    不指定 默认值建立一个private的database link
    PUBLIC 公共连接,这样的连接可以被数据的所有的用户访问
    database link用户验证方法
    取值说明

    不指定 默认值采取Connected User的验证方法
    CONNECT TO CURRENT_USER 采取CURRENT_USER的验证方式
    CONNECT TO user_name IDENTIFIED BY password 采取Fiexed User的验证方式
    database link创建举例
    SQL StatementConnects To DatabaseConnects AsLink Type

    CREATE database link
    sales.us.americas.acme_auto.com USING ‘sales_us’; sales using net service name sales_us Connected user Private connected user
    CREATE database link foo
    CONNECT TO CURRENT_USER USING
    ‘am_sls’; sales using service name am_sls Current global user Private current user
    CREATE database link
    sales.us.americas.acme_auto.com
    CONNECT TO scott IDENTIFIED
    BY tiger USING ‘sales_us’; sales using net service name sales_us scott using password tiger Private fixed user
    CREATE PUBLIC database link
    sales CONNECT TO scott
    IDENTIFIED BY tiger USING ‘rev’; sales using net service name rev scott using password tiger Public fixed user
    CREATE SHARED PUBLIC database link
    sales.us.americas.acme_auto.com
    CONNECT TO scott IDENTIFIED
    BY tiger AUTHENTICATED BY
    anupam IDENTIFIED BY bhide USING ‘sales’; sales using net service name sales scott using password tiger, authenticated as anupam using password bhide Shared public fixed user
    不使用TNS Name一例:
    CREATE database link link_name
    CONNECT TO user IDENTIFIED BY screct
    USING '(DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = sales.company.com)(PORT = 1521))
    )
    (CONNECT_DATA =
    (SERVICE_NAME = sales)
    )
    )';
    database link的使用
    -- 最简单的用法
    SELECT * FROM table_name@database link;
    -- 不想让使用的人知道database link的名字的时候
    -- 建一个别名包装一下
    CREATE SYNONYM table_name FOR table_name@database link;
    SELECT * FROM table_name;
    -- 或者,也可以建立一个视图来封装
    CREATE VIEW table_name AS SELECT * FROM table_name@database link;
    database link删除
    -- 删除public类型的database link
    DROP PUBLIC database link link_name;
    -- 删除非public类型的database link
    -- 注意:只有owner自己能删除自己的非public类型database link
    DROP database link link_name;
    查看database link的信息
    查看系统database link的基本信息
    DBA_DB_LINKS (ALL_DB_LINKS/USER_DB_LINKS)
    DBA_DB_LINKS视图为每一定义的链接返回一行。OWNER 列和DB_LINK列分别显示了这一链接的所有者及名称。对公用数据库链接,OWNER列将包含’PUBLIC’。如果你建立固定用户链接,用户名应在DBA_DB_LINKS视图的USERNAME列里。ALL_DB_LINKS 视图和 USER_DB_LINKS视图与 DBA_DB_LINKS视图相类似-它们分别显示了你能够访问的所有链接及你所拥有的全部链接。
    COL OWNER FOR A15
    COL DB_LINK FOR A25
    COL HOST FOR A25
    COL USERNAME FOR A15
    SELECT * FROM DBA_DB_LINKS;
    DBA_OBJECTS (ALL_OBJECTS/USER_OBJECTS)
    在这个视图里面只能查询到系统有那些database link以及他们的owner,创建时间等信息。
    COL OWNER FOR A15
    COL OBJECT_NAME FOR A25
    COL OBJECT_TYPE FOR A25
    SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_TYPE LIKE 'database link';
    查看保存的Fixed user database link所保存的用户密码,该密码是经过加密的。
    这是比较危险的一件事,有必要对表sys.link$的权限进行限制。
    col host for a15
    col userid for a15
    col passwordx for a40
    col name for a20
    select name, host, userid, passwordx from sys.link$;
    通过database link去SELECT远程数据库的一个表也是一个事务吗?
    select * from v$transaction;
    -- 没有记录,说明没有事务
    -- 通过database link连接远程数据库,select 其中一个表
    select * from bbs_news@mylink
    select * from v$transaction;
    -- 发现有一条记录。
    解释
    因为本地数据库只是将对应的sql发送给远程数据库执行,接受remote db返回的结果,但他并不知道是否该sql修改了数据; 所以需要为select 语句也标示一个事务。
    具体可以参考otn 分布式数据库手册,所以在用database link远程访问时,要加上set transaction read only;
    close database link
    ALTER SESSION CLOSE database link sales;

    其实,dblink的相应属性对应了Oracle的数据字典link$,任何针对dblink的操作都是操作该数据字典。在9i的时候,如果Oracle的global_name仅包括db_name,也就是说DB_DOMAIN的值为空。那么这个时候建立的数据库链,在数据库修改全局名GLOBAL_NAME之后(修改为db_name.db_domain格式),会无法删除。
    如果要产生数据库链,必须将GLOBAL_NAME改回DB_NAME格式,即去掉后面的DOMAIN,但是这个时候,RENAME操作会自动添加域名,使得Oracle全局名无法恢复到初始状态。因此在这情况下,如果需要删除dblink,只能直接操作link$数据字典
    delete from link$ where owner#=user_id and name=dblink_name
    当然直接操作数据字典是危险的,最好做好备份,然后再进行操作。
    利用dblink执行ddl
    我们知道任何ddl语句都无法在dblink中直接执行,示例如下
    SQL> desc db_test;
    Name Null? Type
    ----------------------------------------- -------- ----------------------------
    ID NUMBER(38)

    SQL> drop table db_test@DBLINK_CONNECTED_HR;
    drop table db_test@DBLINK_CONNECTED_HR
    *
    ERROR at line 1:
    ORA-02021: DDL operations are not allowed on a remote database
    通过创建存储过程,使得能在dblink中执行ddl语句。 注意需在目标数据库的相应用户下创建存储过程 ,具体如下
    SQL> exec dbms_utility.EXEC_DDL_STATEMENT@dblink('drop table db_test')
    PL/SQL procere successfully completed.

    SQL> desc db_test;
    ERROR:
    ORA-04043: object db_test does not exist

    dblink的限制
    You cannot perform the following operations using database links:
    Grant privileges on remote objects
    Execute DESCRIBE operations on some remote objects. The following remote objects, however, do support DESCRIBE operations:
    Tables
    Views
    Proceres
    Functions
    Analyze remote objects
    Define or enforce referential integrity
    Grant roles to users in a remote database
    Obtain nondefault roles on a remote database. For example, if jane connects to the local database and executes a stored procere that uses a fixed user link connecting as scott, jane receives scott's default roles on the remote database. Jane cannot issue SET ROLE to obtain a nondefault role.
    Execute hash query joins that use shared server connections
    Use a current user link without authentication through SSL, password, or NT native authentication

    转自http://czmmiao.iteye.com/blog/1236562
    作者:czmmiao

    6. oracle 跨库查询的几种方法

    oracle 跨库查询都必须使用DBLINK,通过DBLINK连接到其它数据库;然后在这个基础上才有不同的访问方式;
    1、同义表,通过在DBLINK上建立同义表将其它数据库的表映射到该库中,然后就可以直接操作映射表;
    2、关联,在表名后面标明数据来源,如emp@ORCL,表示emp表是数据库ORCL上的表。

    7. 如何跨Oracle数据库实现表级别的实时同步

    一. 前言

    这个问题是上一篇文章《Oracle跨数据库实现定时同步指定表中的数据》中所提问题的进一步延伸。考虑到对数据的实时性要求比较高,设置成定时同步,有点不妥,需要改善升级更改为实时同步。

    下面介绍到的方式,严格意义上说,并没有实现实时同步。是通过Oracle数据库创建同义词+DBlink的方式,来建立远程映射。在查看数据时,直接去远程查询源库中的表。

    而我一直关注的是如何进行同步数据,却没有考虑到可以建立映射。另外,还有一点就是需要交代,就是同步到目标数据库中的表,不进行增删改操作,只进行查询的操作,这也是可以使用同义词方式解决问题的关键。

    这种解决思路的出现,多亏了在CSDN问答时,热心网友的回答,下面就是问题详情描述。

    二. 问题描述

    有两个Oracle数据库,分别布置在不同的服务器上,系统均为windows2003;
    这里暂且说成是一个主数据库和从数据库:
    (1) 主数据库:oracle_A;
    (2) 从数据库:oracle_B;
    在oracle_A中有一个表table_A与oracle_B中的表table_B结构相同;
    我是处在oracle_B,oracle_A数据库分配给我有一个访问oracle_A表table_A的用户,该用户只拥有查询的权限;
    另外,需要说明的一点,就是在oracle_B处,只需对table_B表进行查询的操作,不进行其他增删改的操作。

    场景介绍完了,我的问题的是,如何在oracle_A中表table_A发生变化时,实时更新同步到oracle_B的table_B中?

    我原来的处理方式:

    通过建立远程连接DBLink+JOB定时任务+存储过程的方式,实现了定时同步更新,但不能做到实时同步。

    三. 采用同义词+DB_Link的方式结果步骤

    之所以能够选择采用同义词的方式,处理这个问题。主要还是源于在问题描述中提到一个点,那就是我们只需要对同步后的表进行查询操作。这点是使用同义词方式的重要要素。

    下面详细模拟一下整个实验测试的过程:

    (1)首先在Oracle_A端创建一个对table_A只有查询功能的用户
    <1> 创建用户
    sqlplus /nolog
    conn /as sysdba;
    create user username identified by password;

    <2> 查看所有的用户列表
    用户创建完成后,查看用户是否创建成功
    select * from all_users;

    <3>授予权限
    为了能够保证能够登陆,必须赋予如下权限

    --授予username用户创建session的权限,即登陆权限
    grant create session to username;

    --授予username用户使用表空间的权限
    grant unlimited tablespace to username;

    --oracle对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权.
    --如果scott用户要授权给username用户查看自己的test表的权限;
    sqlplus scott/tiget@localhost:1521/orcl

    --授予username用户查看指定的权限
    grant select on test to username;

    --撤销权限
    基本语法同grant,关键字为revoke;

    (2)验证用户是否可以成功登录,并进行访问授权的表
    --使用sqlplus登录,并进行查询
    sqlplus username/password@localhost:1521/orcl;
    select * from scott.test;

    注意:查询表时,务必带上用户名,说明是哪个用户下的表。

    (3)创建远程连接DB_Link
    <1> 创建远程连接 db_link
    create public database link db32connect to tian_test identified by "tian_test" using '192.168.56.6:1521/ORCL'

    <2> 测试远程连接是否成功
    select * from tian_smart.zh_item_news@db32;

    (4)在Oracle_B端创建同义词
    <1> 使用sqlplus登录自己的用户
    sqlplus tian_smart/tian_smart@localhost:1521/orcl

    <2> 创建同义词
    create or replace public synonym TEST1130 for scott.TEST@db32;

    <3> 查询测试
    select * from TEST1130;
    可以看到这与在Oracle_A源数据库中查到的table_A表中的数据一样.

    注意事项:
    当远程查询的数据库中包含BLOB字段时,会报出如下错误.

    ORA-22992: 无法使用从远程表选择的 LOB 定位器

    当出现这个错误的时候,那是因为跨库连接查询中的表中存在BLOB类型的字段,所以一定要注意,所有表中存在blob类型字段,

    不能用 select * from 连接的表
    不能将blob类型的字段出现在脚本中。

    如果这些blob类型的字段一定要导过来,可以先建立临时表再插入本地表,方法如下.在pl/sql中执行

    第一步 建临时表
    create global temporary table foo ( X BLOB )
    on commit delete rows;
    第二步 插入本地表
    insert into foo select blobcolumn from remoteTable@dl_remote ;

    8. oracle同服务器,跨数据库访问,有什么简单的

    • 使用collocated内联视图—也就是sql要对引用不同远程库的表,要组织好,将相同库的表放一起组织成内联视图,这样oracle就很容易知道这个内联视图里的表是在同一远程库作完查询后再返回给本地库,这样减少了本地库与远程库的交互次数和传输结果集的数量和次数。

    • 了解cbo优化器对分布式查询的处理(cbo也是尽量转为collocated内联视图),它可能是不高效的,这时候得用其他的方法,比如使用HINT,改造SQL,改造分布式查询的方法(远程库用视图)等

    • 使用hint,特别是driving_site hint(如:parallel,use_hash,full等,它能指定执行计划在远程还是本地做),特别是本地小结果集,远程大结果集的时候,总体结果集较小,希望计划在远程驱动,这样远程执行完毕,将结果集传输到本地,这样避免大结果集的传输。

    9. Oracle数据库怎样跨库查询

    在ORACLE里A库里建立一个同义词可把B库的X 表映射到A库。这样A库就当本库的表(虚拟式)使用。
    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系。本文介绍如何创建同义词语句,删除同义词以及查看同义词语句。
    oracle的同义词总结:
    从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。
    1.创建同义词语句:
    create public synonym table_name for user.table_name;
    其中第一个user_table和第二个user_table可以不一样。
    此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;
    当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

    10. sql怎样跨数据库查询oracle

    假定您现在拥有一个以Microsoft.NET为架构的网络订购系统,但是品管维护系统却仍然使用一套旧式的Oracle数据库应用程序。当您的顾客在产品保固期间下了产品更换之类的订单,则该笔订单将不收取任何费用。此时您需要从Oracle数据库得到实时的查询结果。借着建立连结服务器的方式(linkedServer),您将可以从SQLServer实时查询出位于Oracle数据库的顾客资料,找出谁是您既有的客户。
    当您的资料分散在不同的SQLServer数据库时,藉由连结服务器可让您执行跨服务器之分布式查询。当所有的数据库服务器都是SQLServer,则连结服务器的设定十分容易,而且在SQLServer线上手册中就涵盖了您所需要了解的所有事项。然而,当部分资料是放在Oracle数据库服务器的时候,这就可能带给您许多挑战。举例来说,光是设定连结服务器就不是一件容易的事。您必须了解到:即是您要在SQLServer的EnterpriseManager设定一个Oracle连结服务器,这台SQLServer对Oracle来说就是一个客户端。所以您必须在SQLServer所在的服务器成功地安装并组态Oracle之客户端软件。因为Oracle提供的产品只支持Oracle8以后的数据库,所以我假设您正在使用的都是Oracle8以后的数据库。在OracleNet8函式库则提供了SQLServer所需要的客户端软件。
    设定连接服务器时是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle网络函式库为SQL*Net2.3.3.0.4或是以后的版本,不过这是Oracle7.3数据库所提供的。换句话说,要设定Oracle数据库为SQLServer的连接服务器时,Oracle数据库只要是7.3.3.4以后的版本,并搭配适当的SQL*Net或是Net8函式库即可。
    在Oracle数据库中,一个schema即代表着SQLServer专家们所熟知的单一数据库(译者注2)。连接至Oracle数据库时,您必须提供schema名称、密码以及主机联机字符串(hoststring)。每一个特定的Oracle帐户都拥有一个Oracleschema,而且只能有一个schema。所以schema名称其实就等于该schema拥有者的帐户名称。您可以查询Oracle的资料字典(Datadictionary)以得到更多有关schema的内容。
    至于Oracle联机字符串又可称为服务名称(servicename)或是系统识别资料(SystenIdentifier,SID)。我们所谓的SQLServer数据库个体(instance)在Oracle则称为数据库(database)。所以安装OracleServer时,安装程序OracleUniversalInstaller(为一个图形接口之安装程序,与SQLServer的Setup程序类似)将会询问您SID名称为何,以作为Oracle数据库之名称。
    这个部分原作者所提到schema的解释有点问题。Oracleschema可视为同一个使用者所拥有的所有数据库对象(schemaobjects)之集合。举例来说,使用者scott所建立的EMPtable其完整名称为SCOTT.EMP,而SCOTT就是EMP的schema名称。所以schemaname其实就是一个Oracle数据库之使用者帐号。但是绝对不能拿来跟数据库相提并论!因为SQLServer的数据库架构包含了datafiles与logfiles,但是Oracle的schemaobjects只存在于tablespace中。为了避免部分读者产生混淆,特此说明。

  • 相关阅读:
    c++中static的使用
    sublime3 ctl+b无效
    Maximum Subarray
    Find the Duplicate Number
    Reverse Linked List
    c++ primer 2 变量和基本类型
    Single Number II
    Roman to Integer & Integer to Roman
    Search Insert Position
    Unique Binary Search Trees II
  • 原文地址:https://www.cnblogs.com/yaoyangding/p/15901508.html
Copyright © 2020-2023  润新知