当前位置:首页 » 数据仓库 » 公共oracle数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

公共oracle数据库

发布时间: 2022-12-28 16:39:57

㈠ 如何连接oracle数据库

如何配置才能使客户端连到数据库:x0dx0ax0dx0a要使一个客户端机器能连接oracle数据库,需要在客户端机器上安装oracle的客户端软件,唯一的例外就是java连接数据库的时候,可以用 x0dx0ajdbc x0dx0athin模式,不用装oracle的客户端软件。加入你在机器上装了oracle数据库,就不需要在单独在该机器上安装oracle客户端了,因为装 x0dx0aoracle数据库的时候会自动安装oracle客户端。x0dx0a 用过sql x0dx0aserver数据库然后又用oracle的新手可能会有这样的疑问:问什么我用sql server的时候不用装sql x0dx0aserver的客户端呢?原因很简单,sql server也是microsoft的,它在操作系统中集成了sql x0dx0aserver客户端,如果microsoft与oracle有协议,将oracle客户端也集成到操作系统中,那我们也就不用在客户端机器装oraclex0dx0a 客户端软机就可访问数据库了,不过,这好像是不可能实现的事情。x0dx0a 也有的人会问:为什么在sql x0dx0aserver中没有侦听端口一说,而在oracle中要配置侦听端口?其实sql x0dx0aserver中也有侦听端口,只不过microsoft将侦听端口固定为1433,不允许你随便改动,这样给你一个错觉感觉sql x0dx0aserver中没有侦听端口,咳,microsoft把太多的东西都封装到黑盒子里,方便使用的同时也带来的需要副作用。而oracle中的侦听端口直接x0dx0a 在配置文件中,允许随便改动,只不过无论怎样改动,要与oracle服务器端设置的侦听端口一致。x0dx0a好,言归正传,我们如何做才能使客户端机器连接到oracle数据库呢?x0dx0aA. 安装相关软件x0dx0aB. 进行适当的配置x0dx0ax0dx0aA.在适当的位置安装适当的软件:x0dx0a在客户端机器:x0dx0a1.在客户端机器上安装ORACLE的Oracle Net通讯软件,它包含在oracle的客户端软件中。x0dx0a2.正确配置了sqlnet.ora文件:x0dx0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)x0dx0aNAMES.DEFAULT_DOMAIN=DB_DOMAINx0dx0a一般情况下我们不用NAMES.DEFAULT_DOMAIN参数。如果想不用该参数用#注释掉或将该参数删除即可,对于NAMES.DIRECTORY_PATH参数采用缺省值即可,对于NAMES.DEFAULT_DOMAIN参数有时需要注释掉,在下面有详细解释。x0dx0a3.正确配置了tnsname.ora文件x0dx0ax0dx0a在服务器端机器:x0dx0a1.保证listener已经启动x0dx0a2.保证数据库已经启动。x0dx0a如果数据库没有启动,用:x0dx0aOracle 9i:x0dx0ados>sqlplus “/ as sysdba”x0dx0asqlplus> startupx0dx0aOracle 8i:x0dx0ados>svrmgrlx0dx0asvrmgrl>connect internalx0dx0asvrmgrl>startupx0dx0a命令启动数据库x0dx0a如果listener没有启动,用:x0dx0alsnrctl start [listener name]x0dx0alsnrctl status [listener name]x0dx0a命令启动listenerx0dx0aB.进行适当的配置x0dx0a如何正确配置tnsname.ora文件:x0dx0ax0dx0a可x0dx0a 以在客户端机器上使用oracle Net Configuration Assistant或oracle Net x0dx0aManager图形配置工具对客户端进行配置,该配置工具实际上修改tnsnames.ora文件。所以我们可以直接修改tnsnames.ora文件,x0dx0a 下面以直接修改tnsnames.ora文件为例:x0dx0a该文件的位置为: ?\network\admin\tnsnames.ora (for windows)x0dx0a?/network/admin/tnsnames.ora (for unix)x0dx0a此处,假设服务器名为testserver,服务名为orcl.testserver.com,使用的侦听端口为1521,则tnsnams.ora文件中的一个test网络服务名(数据库别名)为:x0dx0atest =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=x0dx0a(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此处的笑脸为)。x0dx0a 红色的内容为需要根据实际情况修改的内容,现解释如下:x0dx0a PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。x0dx0ax0dx0aHOST:数据库侦听所在的机器的机器名或IP地址,数据库侦听一般与数据库在同一个机器上,所以当我说数据库侦听所在的机器一般也是指数据库所在的机 x0dx0a x0dx0a器。在UNIX或WINDOWS下,可以通过在数据库侦听所在的机器的命令提示符下使用hostname命令得到机器名,或通过ipconfig(forx0dx0a WINDOWS) or ifconfig(for x0dx0aUNIX)命令得到IP地址。需要注意的是,不管用机器名或IP地址,在客户端一定要用ping命令ping通数据库侦听所在的机器的机器名,否则需要在x0dx0a hosts文件中加入数据库侦听所在的机器的机器名的解析。x0dx0ax0dx0aPORT:数据库侦听正在侦听的端口,可以察看服务器端的listener.ora文件或在数据库侦听所在的机器的命令提示符下通过lnsrctl status [listener name]命令察看。此处Port的值一定要与数据库侦听正在侦听的端口一样。x0dx0a SERVICE_NAME:在服务器端,用system用户登陆后,sqlplus> show parameter service_name命令察看。x0dx0a 如何利用配置的网络服务名连接到数据库:x0dx0a 用sqlplus程序通过test网络服务名进行测试,如sqlplus system/manager@test。x0dx0a 如果不能连接到数据库,则在tnsname.ora文件中的test网络服务名(net x0dx0aservice)后面加上sqlnet.ora文件中NAMES.DEFAULT_DOMAIN参数的值,此处我的参数值为 x0dx0atestserver.com,将其加到网络服务名后面,修改后的tnsname.ora中关于该网络服务名的内容为:x0dx0ax0dx0a 什么情况下会引起oracle自动设置NAMES.DEFAULT_DOMAIN参数?x0dx0a x0dx0a 出现这种情况的典型环境为windows的客户端的‘我得电脑à属性à计算机名à更改à其它?à此计算机的主DNS后缀’中设置了‘primary x0dx0a dns x0dx0asuffix’,因为在这种情况下安装客户端时,会在sqlnet.ora文件中自动设置NAMES.DEFAULT_DOMAIN参数,或许当把计算机x0dx0a 加入域中安装oracle客户端时也会出现这种情况,有条件的话大家可以试一下。x0dx0ax0dx0a我在设置oracle的客户端时一般手工修改tnsnames.ora文件,但是还有许多人喜欢用图形工具配置,该图形工具最终还是修改tnsnames.ora文件,但是它有时会引起其它的问题:x0dx0ax0dx0a在用oracle的图形配置软件'net assistant'或‘Net Configuration x0dx0aAssistant’配置网络服务名时,假如已经设置了‘primary dns x0dx0asuffix’,但是在图形配置软件中写的网络服务名的名字中没有‘primary dns x0dx0asuffix’,如只是写了test,则图形配置软件会自动在后面加上‘primary dns x0dx0asuffix’,使之变为test.testserver.com,并存在tnsnames.ora中,而不管你的sqlnet.ora文件中是否有 x0dx0aNAMES.DEFAULT_DOMAIN参数。此时,用图形工具进行测试连接是通过的,但是假如此时sqlnet.ora文件中没有 x0dx0aNAMES.DEFAULT_DOMAIN参数,则你在使用网络服务名时应该使用在tnsnames.ora中的 x0dx0atest.testserver.com,而不是你在图形配置软件中键入的test。解决的办法为:x0dx0a<1>可以在sqlnet.ora文件中设置NAMES.DEFAULT_DOMAIN= testserver.com,这时你可以用test或test.testserver.com连接数据库x0dx0a<2>在sqlnet.ora文件中不设置NAMES.DEFAULT_DOMAIN参数,在tnsnames.ora文件中将test.testserver.com中的.testserver.com去掉,这时你可以用test连接数据库。x0dx0ax0dx0a关于为什们在网络服务名后面加db_domain参数,需要了解sql*plus连接数据库的原理,我在后面解决12154常见故障中给出了详细的说明。x0dx0ax0dx0a如果上面的招数还不奏效的话,只好用一下干坤大挪移了。x0dx0a将客户端的网络服务名部分x0dx0atest.testserver.com =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此处的笑脸为)。x0dx0a拷贝到服务器的tnsnames.ora文件中。然后再服务器端用sqlplus system/[email protected]连接到数据库。x0dx0a 如果能连接成功,说明你的客户端与服务器端的网络有问题。x0dx0a 如果连接不成功,用前面的部分检查网络服务名部分部分是否正确,如果确信网络服务名部分正确而且所有的客户端都连不上数据库则可能为系统TCP/IP或Oracle系统有问题,建议重新安装数据库。x0dx0a该错误表示用于连接的网络服务名在tnsnames.ora文件中不存在,如上面的tnsnames.ora中的网络服务名只有test,假如用户在连接时用sqlplus system/manager@test1则就会给出TNS-12154错误。x0dx0a要注意的是,有时即使在tnsnames.ora文件中有相应的网络服务名,可是用该网络服务名连接时还会出错,出现这种情况的典型配置如下(在客户端的机器上):x0dx0asqlnet.ora文件:x0dx0aNAMES.DIRECTORY_PATH = (TNSNAMES, ?.)x0dx0aNAMES.DEFAULT_DOMAIN = server.comx0dx0atnsnames.ora文件:x0dx0atest =x0dx0a(DESCRIPTION=x0dx0a(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))x0dx0a)x0dx0a(CONNECT_DATA=(SERVICE_NAME=orcl.testserver.com)x0dx0a)x0dx0a)x0dx0a此处的笑脸为)。x0dx0asql*plus运行基本机理:x0dx0a 在用户输入sqlplus system/manager@test后,sqlplus程序会自动到sqlnet.ora文件中找NAMES.DEFAULT_DOMAIN参数,假 如该参数存在,则将该参数中的值取出,加到网络服务名的后面, x0dx0ax0dx0a即此例中你的输入由sqlplus system/manager@test自动变为sqlplus system/[email protected] x0dx0a,然后再到tnsnames.ora文件中找test.server.com网络服务名,这当然找不到了,因为该文件中只有test网络服务名,所以报 x0dx0a 错。解决的办法就是将sqlnet.ora文件中的NAMES.DEFAULT_DOMAIN参数注释掉即可,如 x0dx0a#NAMES.DEFAULT_DOMAIN = x0dx0aserver.com。假如NAMES.DEFAULT_DOMAIN参数不存在,则sqlplus程序会直接到tnsnames.ora文件中找 x0dx0atest网络服务名,然后取出其中的host,port,tcp,service_name,利用这些信息将连接请求发送到正确的数据库服务器上。x0dx0a 另外原则上tnsnames.ora中的配置不区分大小写,但是我的确遇到区分大小写的情况,所以最好将使用的网络服务与tnsnames.ora中配置的完全一样。x0dx0aORA-12514: TNS:listener could not resolve SERVICE_NAME given in connect Descriptor.x0dx0a该错误表示能在tnsnames.ora中找到网络服务名,但是在tnsnames.ora中指定的SERVICE_NAME与服务器端的SERVICE_NAME不一致。解决的办法是修改tnsnames.ora中的SERVICE_NAME。x0dx0ax0dx0a 易混淆术语介绍:x0dx0a x0dx0a Db_name:对一个数据库(Oracle database)的唯一标识,该数据库为第一章讲到的Oracle x0dx0adatabase。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负 x0dx0a 担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和 x0dx0aDb_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和 x0dx0aDb_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。 x0dx0aDb_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。x0dx0ax0dx0a Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。x0dx0ax0dx0aGlobal_name:对一个数据库(Oracle x0dx0adatabase)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. x0dx0aDb_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改 x0dx0aGlobal_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO x0dx0a命令进行修改,然后修改相应参数。x0dx0ax0dx0aService_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,x0dx0a x0dx0a一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,x0dx0a 而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. x0dx0aDb_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关x0dx0a 系,即不必Service name 必须与SID一样。x0dx0aNet service name:网络服务名,又可以称为数据库别名(database alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。

㈡ 通常我们说oracle数据库

通常我们说oracle数据库就是指用来存储数据的数据库,不是指数据库管理系统。
数据库管理系统(database management system)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称dbms。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。
服务器一般是指通过网络给其他用户提供服务的主机设备(配置较高的电脑)。安装有数据库的机器可以称之为数据库服务器,安装有web应用程序的机器可以称之为应用服务器。
例如,你可以在本机安装oracle数据库,用来存储数据(这就是一个数据库);然后安装 toad for oracle 用来管理这个数据库(这就是一个数据库管理系统);当你的这个数据库允许别的机器通过网络访问并为他们提供服务的时候,你的这台机器就是数据库服务器了。
另外需要说明的是 ,oracle数据库的安装程序里面自带了一套数据库管理系统的,可以通过它来管理oracle数据库,不另外安装数据库管理系统也行的。

㈢ oracle 数据库备份详细步骤是什么

oracle 数据库备份的步骤是:

直接通过exp命令备份需要内容就可以了。可以参考下以下导出备份的方法:

1、将数据库TEST完全导出,用户名system 密码manager 导出到D:chu.dmp中

exp system/manager@TEST file=d:chu.dmp full=y

2、将数据库中system用户与sys用户的表导出

exp system/manager@TEST file=d:chu.dmp owner=(system,sys)

3、将数据库中的表table1 、table2导出

exp system/manager@TEST file=d:chu.dmp tables=(table1,table2)

4、将数据库中的表table1中的字段filed1以"00"打头的数据导出

exp system/manager@TEST file=d:chu.dmp tables=(table1) query=" where filed1 like '00%'"

㈣ 在Oracle中实现数据库的复制

在Internet上运作数据库经常会有这样的需求 把遍布全国各城市相似的数据库应用统一起来 一个节点的数据改变不仅体现在本地 还反映到远端 复制技术给用户提供了一种快速访问共享数据的办法 一 实现数据库复制的前提条件 数据库支持高级复制功能 您可以用system身份登录数据库 查看v$option视图 如果其中Advanced replication为TRUE 则支持高级复制功能 否则不支持 数据库初始化参数要求 ① db_domain = 指明数据库的域名(默认的是WORLD) 这里可以用您公司的域名 ② global_names = true 它要求数据库链接(database link)和被连接的数据库名称一致 现在全局数据库名 db_name+ +db_domain ③ 有跟数据库job执行有关的参数 job_queue_processes = job_queue_interval = distributed_transactions = open_links = 第一行定义SNP进程的启动个数为n 系统缺省值为 正常定义范围为 ~ 根据任务的多少 可以配置不同的数值 第二行定义系统每隔N秒唤醒该进程一次 系统缺省值为 秒 正常范围为 ~ 秒 事实上 该进程执行完当前任务后 就进入睡眠状态 睡眠一段时间后 由系统的总控负责将其唤醒 如果修改了以上这几个参数 需要重新启动数据库以使参数生效 二 实现数据库同步复制的步骤 假设在Internet上我们有两个数据库 一个叫深圳(shenzhen) 一个叫北京(beijing) 具体配置见下表 确认两台数据库之间可以互相访问 在tnsnames ora里设置数据库连接字符串 ① 例如 深圳这边的数据库连接字符串是以下的格式 beijing = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )) ) (CONNECT_DATA = (SERVICE_NAME = beijing) ) )运行$tnsping beijing出现以下提示符 Attempting to contact (ADDRESS=(PROTOCOL=TCP)(HOST= )(PORT= )) OK(n毫秒)表明深圳数据库可以访问北京数据库 ② 在北京那边也同样配置 确认$tnsping shenzhen 是通的 改数据库全局名称 建公共的数据库链接 ① 用system身份登录shenzhen数据库 SQL>alter database rename global_name to cn; 用system身份登录beijing数据库 SQL>alter database rename global_name to ; ② 用system身份登录shenzhen数据库 SQL>create public database link using beijing ; 测试数据库全局名称和公共的数据库链接 SQL>select * from global_n cn; 返回结果为就对了 用system身份登录beijing数据库 SQL>create public database link cn using shenzhen ; 测试数据库全局名称和公共的数据库链接 SQL>select * from global_na cn; 返回结果为 cn就对了 建立管理数据库复制的用户repadmin 并赋权 ① 用system身份登录shenzhen数据库 SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp; SQL>execute dbms_defer_sys register_propagator( repadmin ); SQL>grant execute any procere to repadmin; SQL>execute dbms_repcat_admin grant_admin_any_repgroup( repadmin ); SQL>grant ment any table to repadmin; SQL>grant lock any table to repadmin; ② 同样用system身份登录beijing数据库 运行以上的命令 管理数据库复制的用户repadmin 并赋权 说明 repadmin用户名和密码可以根据用户的需求自由命名 在数据库复制的用户repadmin下创建私有的数据库链接 ① 用repadmin身份登录shenzhen数据库 SQL>create database link connect to repadmin identified by repadmin; 测试这个私有的数据库链接 SQL>select * from global_n cn; 返回结果为就对了 ② 用repadmin身份登录beijing数据库 SQL>create database link cn connect to repadmin identified by repadmin; 测试这个私有的数据库链接 SQL>select * from global_na cn; 返回结果为 cn就对了 创建或选择实现数据库复制的用户和对象 给用户赋权 数据库对象必须有主关键字 假设我们用ORACLE里举例用的scott用户 dept表 ① 用internal身份登录shenzhen数据库 创建scott用户并赋权 SQL>create user scott identified by tiger default tablespace users temporary tablespace temp; SQL>grant connect resource to scott; SQL>grant execute on sys dbms_defer to scott; ② 用scott身份登录shenzhen数据库 创建表dept SQL>create table dept (deptno number( ) primary key dname varchar ( ) loc varchar ( ) ); ③ 如果数据库对象没有主关键字 可以运行以下SQL命令添加 SQL>alter table dept add (constraint dept_deptno_pk primary key (deptno)); ④ 在shenzhen数据库scott用户下创建主关键字的序列号 范围避免和beijing的冲突 SQL> create sequence dept_no increment by start with maxvalue cycle nocache; (说明 maxvalue 可以根据应用程序及表结构主关键字定义的位数需要而定) ⑤ 在shenzhen数据库scott用户下插入初始化数据 SQL>insert into dept values (dept_no nextval accounting new york ); SQL>insert into dept values (dept_no nextval research dallas ); SQL>mit; ⑥ 在beijing数据库那边同样运行以上① ② ③ ⑦ 在beijing数据库scott用户下创建主关键字的序列号 范围避免和shenzhen的冲突 SQL> create sequence dept_no increment by start with maxvalue cycle nocache; ⑧ 在beijing数据库scott用户下插入初始化数据 SQL>insert into dept values (dept_no nextval sales chicago ); SQL>insert into dept values (dept_no nextval operations boston ); SQL>mit; 创建要复制的组scott_mg 加入数据库对象 产生对象的复制支持 ① 用repadmin身份登录shenzhen数据库 创建主复制组scott_mg SQL> execute dbms_repcat create_master_repgroup( scott_mg ); 说明 scott_mg组名可以根据用户的需求自由命名 ② 在复制组scott_mg里加入数据库对象 SQL>execute dbms_repcat create_master_repobject(sname=> scott oname=> dept type=> table use_existing_object=>true gname=> scott_mg ); 参数说明 sname 实现数据库复制的用户名称 oname 实现数据库复制的数据库对象名称 (表名长度在 个字节内 程序包名长度在 个字节内) type 实现数据库复制的数据库对象类别 (支持的类别 表 索引 同义词 触发器 视图 过程 函数 程序包 程序包体) use_existing_object true表示用主复制节点已经存在的数据库对象 gname 主复制组名 ③ 对数据库对象产生复制支持 SQL>execute dbms_repcat generate_replication_support( scott dept table ); (说明 产生支持scott用户下dept表复制的数据库触发器和程序包) ④ 确认复制的组和对象已经加入数据库的数据字典 SQL>select gname master status from dba_repgroup;SQL>select * from dba_repobject; 创建主复制节点 ① 用repadmin身份登录shenzhen数据库 创建主复制节点 SQL>execute dbms_repcat add_master_database(gname=> scott_mg master=> use_existing_objects=>true _rows=>false propagation_mode => asynchronous ); 参数说明 gname 主复制组名 master 加入主复制节点的另一个数据库 use_existing_object true表示用主复制节点已经存在的数据库对象 _rows false表示第一次开始复制时不用和主复制节点保持一致 propagation_mode 异步地执行 ② 确认复制的任务队列已经加入数据库的数据字典 SQL>select * from user_jobs; 使同步组的状态由停顿(quiesced )改为正常(normal) ① 用repadmin身份登录shenzhen数据库 运行以下命令 SQL> execute dbms_repcat resume_master_activity( scott_mg false); ② 确认同步组的状态为正常(normal) SQL> select gname master status from dba_repgroup; ③ 如果这个①命令不能使同步组的状态为正常(normal) 可能有一些停顿的复制 运行以下 lishixin/Article/program/Oracle/201311/16816

㈤ Oracle进行数据库查询的小技巧

数据查询 是数据库操作中最主要的功能之一;有时候数据库查询性能的好坏 直接关系到数据库的运行效率 关系到数据库的选型 下面笔者不谈大道理 只是对其中对一些平时大家容易忽略的查询小技巧做一些总结 或许大家可能正在为此犯愁呢?

第一个技巧 利用连接符连接多个字段

如在员工基本信息表中 有员工姓名 员工职位 出身日期等等 如果现在视图中这三个字段显示在同一个字段中 并且中间有分割符 如我现在想显示的结果为 经理Victor出身于 年 月 日 这该如何处理呢?其实 这是比较简单的 我们可以在Select查询语句中 利用连接符把这些字段连接起来

如可以这么写查询语句

SELECT员工职位 || ||员工姓名|| 出身于 ||出身日期 as 员工出身信息 FROM 员工基本信息表;

通过这条语句就可以实现如上的需求 也就是说 我们在平时查询中 可以利用||连接符把一些相关的字段连接起来 这在报表视图中非常的有用 如笔者以前在设计图书馆管理系统的时候 在书的基本信息处有图书的出版社 出版序列号等等内容 但是 有时会在打印报表的时候 需要把这些字段合并成一个字段打印 为此 就需要利用这个连接符把这些字段连接起来 而且 利用连接符还可以在字段中间加入一些说明性的文字 以方便大家阅读 如上面我在员工职位与员工姓名之间加入了空格;并且在员工姓名与出身日期之间加入了出身于几个注释性的文字 这些功能看起来比较小 但是却可以大大的提高内容的可读性 这也是我们在数据库设计过程中需要关注的一个内容

总之 令后采用连接符 可以提高我们报表的可读性于灵活性

第二个技巧 取消重复的行

如在人事管理系统中 有员工基本信息基本表 在这张表中 可能会有部门 职位 员工姓名 身份证件号码等字段 若查询这些内容 可能不会有重复的行 但是 我若想知道 在公司内部设置了哪些部门与职位的时候 并且这些部门与职位配置了相关人员 此时 又该如何查询呢?

若我现在直接查询部门表 其可以知道系统中具体设置了哪些部门与职位 但是 很有可能这些部门或者职位由于人事变动的关系 现在已经没有人了 所以 这里查询出来的是所有的部门与职位信息 而不能够保证这个部门或者职位一定有职员存在 也就是说 这不能够满足于我们上面的要求

若我现在直接从员工信息表中查询 虽然可以保证所查询出来的部门与职位信息 一定有员工信息的存在 但是 此时查询出来的部门与职位信息会有重复的行 如采购部门分工合作 可能会有采购采购小组长 此时 在查询出来的部门与职位的信息中 就会有三条重复的记录

所以 以上两种处理方式 都不能够百分之百的满足企业用户的需求 此时 我们其实可以利用一个DISTINCT函数 来消除其中查询出来的重复行

如我们可以利用SELECT DISTINCT 部门信息 职位信息 FROM 员工基本信息表 通过这条加了DISTINCT约束的查询语句 不但可以查询出所有有员工的职位与部门信息 而且 会把重复的记录过滤掉 从而提高可阅读性

所以 在数据库设计过程中 特别是在查询语句的使用中 这个函数特别有用

第三个技巧 勤用WHERE语句

我们都知道 数据库查询效率高不高 是我们评价数据库设计好坏的一个重要标准 毋庸置疑 在数据库查询中勤用Where条件语句 是提高数据库查询性能的一个很重要的手段之一 特别是在设计到比较大的表中查询符合条件的记录过程中 利用WHERE条件语句加以限制 可以大幅度的提高查询的响应速度

如在图书馆管理系统中 现在有人想查询 注册会计师 辅导用书的时候 虽然不在书的类别或者名称中输入 注册会计师 先查询出全部的纪录 然后再一条条的看是否有相关的书籍信息 也是可行的 但是 这么处理的话 一方面系统响应的速度会非常的慢 因为里面记录很多 另一方面 查询的结果看起来也会非常的头疼

其实 我们只需要在查询中加入一些查询的参数 利用Where条件语句加以限制 则即可以提高数据库响应的速度 也可以找出最符合用户需求的数据

另外 我也接触过一些在Oracle数据库上设计的平台型管理软件 他们可以自定义相关的报表 在报表设计中 只要用户在前台设计平台中 选中 大表查询 的话 则这个平台会在生成报表的时候 自动应用Where条件语句 以提高前台系统从数据库查询数据的效率

所以 笔者认为在Oracle数据库系统设计中 要勤于使用Where语句 利用Where语句来提高数据库查询的效率

第四个技巧 灵活使用COUNT函数

在查询处理的时候 COUNT函数可以说是我们应用的比较多的函数之一 如我们有时候需要统计员工的人数 统计图书的种类数的时候 都需要使用到这个函数 不过 这个函数很多人可能会用 但是到灵活应用的地步 还是有一点差距

下面笔者就COUNT函数的一些应用技巧谈谈自己的心得

一是要灵活放置COUNT函数的位置 因为利用COUNT函数统计记录数的时候 是会考虑空行的记录的 如在数据表中一般有序列字段与其它的有意义字段两类 有时候可能序列字段中有内容而其它字段中没有内容 则在利用COUNT函数统计记录数量的时候 会把这个空记录也考虑进去 很明显 则就会发生统计的错误 所以 这个COUNT函数该放在哪个位置上 还是比较讲究的 一般的话 笔者试建议不要放在序列号字段上 而要放在一些关键的实体字段中 如统计员工人数的时候 则就可以放在员工姓名或者编号上等等

二是灵活跟其它函数搭配使用 如在上面的例子中 笔者谈到有时候用户需要知道现在有员工编制的部门与职位有哪一些 我们可以利用DISTINCT函数来找出具体的部门 但是 我现在只想知道有编制的部门与职位具体有多少 此时 我们也可以利用COUNT 与DISTINCT函数结合应用 找出我们所需要的数据 在COUNT函数中 可以指定ALL与DISTINCT选项 默认的情况下 是ALL选项 表示统计所有的行 其中也包括重复的行 而DISTINCT就表示只统计不重复的行 可见 COUNT函数跟其它函数搭配使用的话 可以简化我们的查询语句 提高查询效率

第五个技巧 只查询时必须的字段

有时候 用户不同的查询需求都要用到同一张表 如在员工信息表中包含了很多内容 有时候用户想要知道正式员工有多少;管理层员工有多少;生产线员工又有哪些;或者想知道合同即将到期的员工有哪些 为此 就遇到一个问题 因为这些内容基本上都是在同一张表中 那是在同一个视图中实现 而是根据需求不同 设计不同的视图呢?

若单从技术上考虑 两这都是可以实现的 不会有多大的难度 但是 若是从数据库性能上考虑在 则还是采用不同的视图来实现不同的需求为好

一方面 若从安全方面讲 则可以根据不同的视图来控制相关的访问权限 可见 把视图细化 在权限控制上则会更加的灵活

lishixin/Article/program/Oracle/201311/17049

㈥ python用管理员身份连接oracle数据库时报错:

给你一个连接Oracle的公共库:

#-*-coding:utf-8-*-
#!/usr/bin/envpython
'''
Createdon2014年8月4日

@author:188007

连接Oracle数据库的class
'''
importos
os.environ['NLS_LANG']='SIMPLIFIEDCHINESE_CHINA.ZHS16GBK'
importcx_Oracle
importsys

classOracle:
'''

'''

def__init__(self,ip,port,db,user,pwd):
self.ip=ip
self.port=port
self.db=db
self.user=user
self.pwd=pwd

def__GetConnect(self):
"""得到连接信息返回:conn.cursor()"""
ifnotself.db:
raise(NameError,"没有设置数据库信息")
dsn=cx_Oracle.makedsn(self.ip,self.port,self.db)
self.conn=cx_Oracle.connect(self.user,self.pwd,dsn)
cur=self.conn.cursor()
ifnotcur:
raise(NameError,"连接数据库失败")
else:
returncur

defExecQuery(self,sql):
"""执行查询语句返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
调用示例:
oracle=Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
resList=oracle.ExecQuery("SELECTOBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARKFROMGFDMS.THZONEORDERBYNUMCODE")
for(AREANAME)inresList:
printstr(AREANAME).decode('gb2312')
"""
try:
cur=self.__GetConnect()
cur.execute(sql)
resList=cur.fetchall()

#查询完毕后必须关闭连接
self.conn.close()
exceptException,err:
sys.exit(1)

returnresList

defExecNonQuery(self,sql):
"""执行非查询语句
调用示例:
oracle.ExecNonQuery("insertintoTHZONEvalues('x','y')")
"""
try:
cur=self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
exceptException,err:
sys.exit(1)

#defmain():
##oracle=Oracle('10.27.95.253','1561','GFDMS','GFITAPPS','GFITAPPS')
###返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
##oracle.ExecNonQuery("insertintoTHZONEvalues('x','y')")
#oracle=Oracle('10.27.95.253','1561','GTEST','GTAPPS','GTAPPS')
#resList=oracle.ExecQuery("SELECTOBJID,NUMCODE,AREACODE,AREANAME,PROVCODE,PROVNAME,CITYCODE,CITYNAME,TOWNCODE,TOWNNAME,REMARKFROMGTEST.THZONEORDERBYNUMCODE")
#for(AREANAME)inresList:
#printstr(AREANAME).decode('utf-8')
#
#if__name__=='__main__':
#main()

㈦ 数据库是什么Oracle又是啥玩意

经常会有人问我数据库是干啥的,其实一开始我是拒绝回答的,因为我也不能做到通俗易懂的表达出来,毕竟我接触这个概念也没有多长时间,但随着问的人多了,我觉得是时候脑补一下我的第一堂课了,万一哪天冒出来个货跟你掰扯这事儿,你没分分钟给他说清,最后弄个丢里儿丢面儿,好尴尬呀。

数据库,说白了就是按照数据结构来组织、存储和管理数据的仓库,这些数据是结构化的,并可为多种应用服务。也就是说,数据库是使用计算机服务器来存储数据的,专门用来提供各种数据服务。可以这样想象,过去一个公司的所有财务数据都是放在保险柜里面,而现在我们就可以针对这些财务数据搭建一个数据库放在某台计算机或服务器上面;再比如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种"数据库",使其可以利用计算机实现财务、仓库、生产的自动化管理。最常见的数据库有:银行储蓄系统、手机话费系统、美容美发会员系统、超市会员积分系统、水电费系统、机票或火车票系统等,这些都需要后台数据库基础设施的支撑。举了这么多例子,应该是把数据库说明白了,至少能在大脑里面有个概念,知道这个东西是干啥的。

现在大数据被炒的红得发紫,而大数据的基础也是数据,由此可见,数据是一个企业的核心资源,说它是企业的立身之本、发展之基都不为过,因此,维护数据库的数据库管理员(DBA)是企业不可或缺的。

目前市面上的数据库产品有很多,单从规模上分可分为大型、中型、小型几种,典型的数据库产品如下:

大型数据库:Oracle、DB2、Sybase;

中型数据库:MySQL、SQLServer、Infomix;

小型数据库:Access、VisualFoxpro。在众多的数据库产品中,Oracle数据库一直处于行业领导先地位,也是当今最流行的关系型数据库。Oracle可翻译成"甲骨文",它是一家以数据库为主业的全球化公司,是全球第二大软件公司(第一名是微软公司),目前Oracle在数据库软件市场已经排名第一,数据库软件市场份额达到48.6%,遥遥领先于第二名占有率仅为20.7%的IBM公司的DB2。在中国市场上的计算机专业系统后台所使用的数据库尤以Oracle数据库居多。但是购买Oracle数据库需要很大一笔费用,一般的大型企业使用,需要有专业人员进行管理和维护,中小企业承担不起。中小企业为了节省成本,一般使用MySQL、PostgreSQL这类免费开源的数据库,所以Oracle数据库相关的工作岗位一般是在大型企业中。

对于为什么选择Oracle数据库,而不是其他的数据库?

第一,是因为Oracle数据库占据最大的市场份额,并且越来越大,市场需要很多Oracle数据库方面的人才,中国有句老话说"做对事,选对人",是同样的道理;第二,是很多非Oracle数据库的老系统正往Oracle数据库迁移,其他数据库市场占有率在减少,其他数据库工作者有面临失业的风险;第三,Oracle有大量的官方学习文档,还有部分中文文档,可以有效地进行学习;第四,Oracle有大量的从业人员,有共同方向的朋友可以互相帮助,不再是孤胆英雄;第五,是可以很容易地从Oracle官方网站下载功能齐全的数据库最新版本进行学习,可以让你了解数据库方面的最新发展趋势等。

在此说明,以后的所有内容都是基于Oracle11g数据库产品的,下面我们就简单介绍一下Oracle11g的系列产品:

企业版(EnterpriseEdition)此版本包含了数据库的所有组件,并且能够通过购买选项和程序包来进一步对其增强。

能支持例如大业务量的在线事务处理OLTP(On-LineTransactionProcessing联机事务处理系统)环境、查询密集的数据仓库和要求苛刻的互联网应用程序。

标准版1(StandardEditionOne)此版本为工作组、部门级和互联网、内联网应用程序提供了前所未有的易用性和性价比。从针对小型商务的单服务器环境到大型的分布式部门环境,该版本包含了构建重要商务应用程序所必需的全部工具。它仅许可在最高容量为2个处理器的服务器上使用,支持Windows/Linux/UNIX操作系统,并支持64位平台操作系统。

标准版(StandardEdition)此版本提供了StandardEditionOne所不具有的易用性、能力和性能,并且利用真正的应用集群(RAC)提供了对更大型计算机和服务集群的支持。它可以在最高容量为4个处理器的单台服务器上、或者在一个支持最多4个处理器的集群上使用,可支持Windows、Linux和UNIX操作系统,并支持64位平台操作系统。

简化版此版本支持与标准版1、标准版和企业版完全兼容的单用户开发和部署。通过将Oracle数据库获奖的功能引入到个人工作站中,该版本提供了结合世界上最流行的数据库功能的数据库,并且该数据库具有桌面产品通常具有的易用性和简单性,可支持Linux和Windows操作系统。

从存储结构上来说,目前流行的数据库主要包含以下两种:

RDBMS:关系型数据库,是指采用了关系模型来组织数据的数据库;

NoSQL数据库,是指那些非关系型的、分布式的数据库。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。

关系型数据库优点:

1、容易理解

二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。

2、使用方便

通用的SQL语言使得操作关系型数据库非常方便。

3、易于维护

丰富的完整性大大减低了数据冗余和数据部移植的概率。

4、事务安全

所有关系型数据库都不同程度的遵守事物的四个基本属性,因此对于银行、电信、证券等交易型业务是不可或缺的。

关系型数据库的瓶颈:

1、高并发读写需求

网站的用户并发性非常高,往往达到每秒上万次读写请求,对于传统型数据库来说,硬盘I/O是一个很大的瓶颈。

2、海量数据的高效率读写

互联网上每天产生的数据量是巨大的,对于关系型数据库来说,在一张包含海量数据的表中查询,效率是非常低的。

3、高扩展性和可用性

在基于WEB的结构中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库却没有办法像WEBServer和APPLICATIONServer那样简单的通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移。

NoSQL数据库

NoSQL一词首先是CarloStrozzi在1998年提出的。2009年再次提出了NoSQL一词,用于指那些非关系型的、分布式的,且一般不保证遵循ACID原则的数据存储系统。

NoSQL具有以下特点:

1、可以弥补关系型数据库的不足

2、针对某些特定的需求而设计,可以具有极高的性能

3、大部分都是开源的,由于成熟度不够,存在潜在的稳定性和维护性问题。

关系型数据库适用于结构化数据,而非关系型数据库适用于非结构化数据,二者优势互补,相得益彰。

Oracle数据库未来的发展方向是提供结构化、非结构化、半结构化的解决方案,实现关系型数据库和NoSQL共存互补。值得强调的是,目前关系型数据库仍是主流数据库。

虽然NoSQL数据库打破了关系型数据库存储的观念,可以很好地满足WEB2.0时代数据的存储要求,但NoSQL数据库也有自己的缺陷。在现阶段的情况下,可以将关系型数据库和NoSQL数据库结合使用,相互弥补各自的不足。

关于数据库及其代表产品Oracle今天就介绍这么多,有兴趣的可以继续深挖,希望我的介绍能让你对数据库有一个更深入的认识。如果有志于在这方面发展的话,就让我们一起跟往事干杯从头再来。

㈧ c# 连接oracle数据库的公共类

using System;
using System.Collections.Generic;
using System.Text;

using System.Configuration;
using System.Data.OracleClient;
using System.Data;
using System.Windows.Forms;
using System.Collections;
using Microsoft.VisualBasic.Devices;
using System.Security.Cryptography;
using System.IO;

namespace mydbproc
{
class Encrypt
{
public string MD5(string P_EncryptStr)
{
int num;
byte[] buffer = new byte[P_EncryptStr.Length];
for (num = 0; num < P_EncryptStr.Length; num++)
{
buffer[num] = (byte) P_EncryptStr[num];
}
byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(buffer);
string str = "";
for (num = 0; num < buffer2.Length; num++)
{
str = str + buffer2[num].ToString();
}
return str;
}

public string TripleDES(string Value, string password)
{
string s = "";
string str2 = "qcDY6X+aPLw=";
SymmetricAlgorithm algorithm = new ();
algorithm.Key = Convert.FromBase64String(s);
algorithm.IV = Convert.FromBase64String(str2);
algorithm.Mode = CipherMode.ECB;
algorithm.Padding = PaddingMode.PKCS7;
ICryptoTransform transform = algorithm.CreateEncryptor(algorithm.Key, algorithm.IV);
byte[] bytes = Encoding.UTF8.GetBytes(Value);
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, transform, CryptoStreamMode.Write);
stream2.Write(bytes, 0, bytes.Length);
stream2.FlushFinalBlock();
stream2.Close();
return Convert.ToBase64String(stream.ToArray());
}

}
class DBProc
{

const string GET_SID = "WMSCONN";

protected string _connStr = string.Empty

public DBProc()
{
//以下自己填写
string _dataSouce = "";
string _user ="";
string _pw="";
//这你自己填写

_connStr = "Data Source=" + _dataSouce + ";Persist Security Info=True;User ID=" + _user + ";Password=" + _pw + ";Unicode=True";
}

public string GetConnectionstring()
{
return _connStr;
//ConnectionStringsSection _connectionStringsSection = WebConfigurationManager.GetSection("connectionStrings") as ConnectionStringsSection;
//return _connectionStringsSection.ConnectionStrings[GET_SID].ToString();
}

public DataTable OraExeFill(string cmdStr)
{
DataTable _returnTable = new DataTable();
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
OracleDataAdapter _adapter = new OracleDataAdapter(cmdStr, _connection);
_adapter.Fill(_returnTable);
}
catch (Exception)
{
}
return _returnTable;
}

public bool OraExeSP_UserAuth(string user, string pw, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandType = CommandType.StoredProcere;
_command.CommandText = "TP.PKG_HR.SP_HR_USER_AUTH_1";
_command.Parameters.Add("P_USER", OracleType.VarChar, 20).Value = user;
_command.Parameters.Add("P_PW", OracleType.VarChar, 50).Value = pw;
_command.Parameters.Add("P_TYPE", OracleType.VarChar, 500).Direction = ParameterDirection.Output;
_command.Parameters.Add("P_RET", OracleType.Number, 1).Direction = ParameterDirection.Output;
_command.Parameters.Add("P_MSG", OracleType.VarChar, 500).Direction = ParameterDirection.Output;
_connection.Open();
_command.ExecuteNonQuery();
_ret = (_command.Parameters["P_RET"].Value != DBNull.Value) ? (Convert.ToInt32(_command.Parameters["P_RET"].Value) > 0) : false;
msg = (_command.Parameters["P_MSG"].Value != DBNull.Value) ? _command.Parameters["P_MSG"].Value.ToString() : "";
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
}
finally
{
_connection.Close();
}
return _ret;
}

public bool OraExeFill(string cmdStr,ref DataTable _dt,ref string _msg)
{
bool _ret=false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
OracleDataAdapter _adapter = new OracleDataAdapter(cmdStr, _connection);
_adapter.Fill(_dt);
_ret=true;
}
catch (Exception e)
{
_msg=e.Message;
}
return _ret;
}

public string OraExeScalar(string cmdStr, ref string msg)
{
string _scalarValue = "";
DataTable _returnTable = new DataTable();
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleCommand _command = _connection.CreateCommand();
_command.CommandText = cmdStr;
_scalarValue = _command.ExecuteScalar().ToString();
}
catch (Exception ex)
{
msg = ex.Message.ToString();
return "";
}
finally
{
_connection.Close();
}
return _scalarValue;
}

public bool OraExeNonQuery(string cmdStr, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleTransaction _trans = _connection.BeginTransaction();
OracleCommand _command = _connection.CreateCommand();
_command.Transaction = _trans;
try
{
_command.CommandText = cmdStr;
_command.ExecuteNonQuery();
_trans.Commit();
_ret = true;
}
catch (Exception ex1)
{
_trans.Rollback();
msg = ex1.Message.ToString();
}
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
finally
{
_connection.Close();
}
return _ret;
}

public bool OraExeNonQuery(ArrayList cmdStr, ref string msg)
{
bool _ret = false;
OracleConnection _connection = new OracleConnection(GetConnectionstring());
try
{
_connection.Open();
OracleTransaction _trans = _connection.BeginTransaction();
OracleCommand _command = _connection.CreateCommand();
_command.Transaction = _trans;
try
{
for (int i = 0; i < cmdStr.Count; i++)
{
_command.CommandText = cmdStr[i].ToString();
_command.ExecuteNonQuery();
}
_trans.Commit();
_ret = true;
}
catch (Exception ex1)
{
_trans.Rollback();
msg = ex1.Message.ToString();
}
}
catch (Exception ex)
{
msg = ex.Message.ToString();
}
finally
{
_connection.Close();
}
return _ret;
}
}
}

㈨ Oracle9i不仅仅是数据库

我们大家都知道Oracle i是数据库产品 可能会由此而推断Oracle i 是 i 的新版本 其实Oracle i 并非单一的数据库产品 它是将Oracle i数据库 Oracle i 应用服务器(Oracle iAS)和Oracle i Developer Suite集成在一起的用于Internet的新一代智能化的 协同各种应用的软件基础架构 Oracle认为 目前企业用户在IT方面投资结构中最大部分是基础环境建设 其次是标准业务系统 二者合起来能够占到IT总投资的 % 而对于最有竞争力的业务增值系统投资往往最少 只能占到 % 在基础结构上投资过多导致企业采用了多个厂商的产品 而这些产品之间往往缺乏兼容性 Oracle的目标是使用户将 %的投资用于真正对业务提供高增值的部分 在这种情况下 Oracle看到了软件正在从产品转变为服务 Oracle i正是集成了Oracle 的各项先进技术 将提供高的服务质量和优良的服务类型作为目标的套件平台 Oracle i数据库 作为长达 年的软件技术研发成果 Oracle i数据库在全面继承Oracle i数据库Internet技术基础上 进一步增强了Oracle i 数据库在可伸缩性 可用性 Java与XML支持能力等方面的性能 与Oracle i数据库相比 Oracle i数据库借助突破性的真正应用集群技术(Real Application Clusters)提供了无限的可伸缩性和总体可用性 具有集成的先进数据分析与数据挖掘功能以及更自动化的系统管理功能 是能够跨越多个计算机集群系统 运行SAP PeopleSoft Siebel Oracle电子商务套件等主流应用软件的数据库平台 最经济的计算体系——集群计算体系 近年来 企业用户在构建信息应用系统时只能在两种计算体系中进行选择 一是基于主机的计算体系 另一就是基于客户机/服务器的计算体系 基于主机的计算体系具有良好的系统可伸缩性 可靠性和高性能 但它昂贵的价格迫使用户在系统建设之初就在硬件系统上投入巨大资源 而用户花费巨额资金购买的主机系统也许包含了不少并不需要的功能 造成资源浪费 基于客户机/服务器的计算体系虽然允许用户根据实际需要逐步增加硬件系统 但这种体系的系统在应用升级和管理方面都需要用户付出巨大的代价 借助Oracle i数据库 Oracle提供了新的最经济的计算模式 这就是集群计算模式 其核心技术是Oracle真正应用集群技术 允许用户把运行了Oracle i真正应用集群系统的普通硬件系统组成集群 并根据需要随时在集群系统中增加新的硬件 提高系统的伸缩性和可用性 从而能够在价格相对低廉的中低端平台上享用过去只有高端系统才具备的高可伸缩性和高可用性 既提高了系统的性能 同时也降低了成本 实现了更多的计算机=更快速度的目标 无限的可伸缩性和可用性 Oracle i真正应用集群是Oracle新一代群集技术 包括 项专利和 项待批专利技术 借助Oracle获得专利的Cache Fusion(高速缓存融合)体系结构 Oracle i真正应用集群系统能够迅速有效地在集群的所有计算机上共享那些经常被访问的数据 从而能够提供透明的应用可伸缩性和超过四个节点几乎线性的总体可用性 这意味着在计算机数量和用户数量都增加 倍时 系统的响应速度不会受到任何影响 为了充分发挥Oracle i真正应用集群系统的功能 Oracle与康柏 EMC HP Sun等领先的硬件厂商紧密合作 共同开发能够与这一新集群技术无缝工作的硬件服务器和网络存储系统 借助Oracle i实时应用集群 Oracle i数据库在集群系统上能够真正作为一个单一的数据库系统 不需要把数据分离在多个计算机中 因此 如果用户在集群系统中增加计算机 Oracle i数据库能够自动地检索出新的计算资源并充分利用 使用户能够容易地在集群系统中增加计算能力 同时有效地改进应用的可伸缩性和可用性 完整的数据库功能 Oracle i数据库提供了 多个新功能 在集群技术 高可用性 商业智能 安全性 系统管理等方面都实现了新的突破 在商业智能方面 Oracle i数据库能够提供具有强劲联机分析处理(OLAP)和数据挖掘技术的先进分析服务 使用户能够容易地开发个性化的解决方案 对包括历史信息和当前Web网站交互信息在内的所有数据进行分析 Oracle i数据库大幅度提高了核心数据管理能力 能够支持更大的数据量 更多的用户 更快的响应时间和更有效的数据抽取 转换和加载(ETL)功能 在安全性方面 Oracle i数据库提供了完善的端到端安全体系结构 包括强壮的三层安全体系 托管环境的安全体系 支持基于标准的PKI 改进的用户和安全管理策略 提供数据加密和标签安全(Label Security)等等 进一步改进的可管理性是Oracle i数据库的主要优势之一 主要体现在以下几个方面 在一些关键领域实现数据库自助管理 流线化并改进了操作管理过程 提供有效的管理工具和技巧减少管理数据库所需要的任务和时间 提供能够管理整个Oracle堆栈而不仅仅是数据库的端到端系统管理解决方案 在可用性方面 Oracle i数据库提供了总控钥匙式零数据丢失保护环境 通过对更多联机操作的支持减少脱机维护的要求 提供快速而准确的数据库修复工具 提供自助错误更正功能使最终用户容易识别并更正自己引起的错误 Oracle i数据库还提供了大量的配置 以便使数据库能够在预定维修 甚至意外灾难期间提供一致的性能 借助这些强大的可用性保障体系 Oracle i数据库实现了高可用性 Oracle i Application Server(Oracle iAS) 同Oracle i 和 Oracle i Developer Suite工具集结合在一起 Oracle iAS为创建 提交和管理Internet应用提供了高度可伸缩的 基于标准的基础结构和优良的数据集成特性 它适于运行任何Internet应用包括J EE和基于模型的应用 Oracle iAS提供了由 Apache所支持的Oracle iAS 高速缓存等新特性 可大幅提高网站性能和规模可调性 无需增加更多的昂贵硬件就可以以更丰富的动态页面内容支持更多的用户 Oracle iAS 使用户可以通过企业门户提供统一风格的服务 以Web界面为先 将浏览器作为标准访问界面 同时还有很多可用的现成Portlet(网页模块)存储在Oracle i 数据库中 这样用户只需要通过装配组合就可以快速构造出企业电子商务门户 Oracle iAS 还支持基于角色的个性化处理 能够构建一次登录门户 Oracle iAS Wireless支持任何访问设备 并能够根据访问设备的不同进行个性化处理 Oracle i Developer Suite 该套件是一套完整集成的开发工具包 开发人员可利用它简便快捷地创建下一代的具有个性化的门户以及托管软件服务功能的Internet应用 该产品包具有公共的IDE以及用于建模 Java程序设计 组件开发和生成报表的工具 所有工具共享一个公用数据字典 允许开发者相互共享开发项目 通过集成的Java XML和SQL开发 使开发人员可以灵活使用多种开发策略 ■ lishixin/Article/program/Oracle/201311/17089

㈩ oracle 数据库的外模式,内模式,模式。

引用:http://blog.csdn.net/zhaowenzhong/article/details/6076373
我觉得这里说得还是比较靠谱:

在ORACLE数据库中,
模式对应整个数据库中的表、索引、序列;
外模式对应某个用户的表、索引、序列、视图、同义词,也称为“方案对象”;
内模式对应存储结构,比如逻辑存储结构(表空间、区、段、块等)、物理存储结构(数据文件、控制文件、重做日志文件、初始化参数文件、配置文件等)。

其他数据库类似。
我用了DB2,其中就有模式SCHMEA关键词,但这个概念比较虚,更多人愿意使用OWNER这个关键词。
最大的问题在于电脑不是中国人发明的,数据库概念也不是,模式的词汇是硬翻译过来的。
个人认为模式,就是架构层次的意思,
模式:总体架构及设计方式
外模式:用户层,所有与使用者程序或用户打交道的一系列概念
内模式:存储层,所有与数据存储方式打交道的一系列概念

如果要以视图访问来看,就更典型:
SELECT * FROM 数据库.A视图
A视图纯粹用于用户层
而视图->表->表空间的整体架构就是数据库模式
A视图基于 B,C,D表
B,C,D表又位于b,c,d表空间
那么 A->B,C,D就是外模式到模式的对应, B,C,D=>到b,c,d就是模式到内模式的对应
内模式不仅包含表如何存放到表空间,表空间如何在文件上存储,还要关心表空间如何分页、分段、分区等。