
oraclecount一直出不来数量的原因和优化方法有索引问题、数据库性能问题、数据库锁问题、数据库版本问题。
1、索引问题:如果查询条件中的字段没有建立索引,或者索引失效,可能会导致oraclecount查询速度变慢,甚至无法返回结果。此时,可以通过建立索引或者优化查询语句来解决问题。
2、数据库性能问题:如果数据库的性能较差,例如内存不足、CPU占用率过高等,也可能导致oraclecount查询缓慢或者无法返回结果。此时,可以通过优化数据库配置或者增加服务器硬件资源来提升数据库性能。
3、数据库锁问题:如果在查询时出现了锁表或者锁行的情况,也会导致oraclecount无法返回结果。此时,可以通过查看数据库锁的情况,或者优化并发访问控制来解决问题。
4、数据库版本问题:如果使用的Oracle数据库版本较老,可能存在一些已知的Bug或者性能问题,需要升级到较新的版本来解决问题。
首先你确保开启了这个新建的数据库服务
再次到tns里去把这个数据库看看是否配置正确 然后才能登陆 ,如果你是在本机登陆(即oracle服务器在本机上,就可以不配置tns),
如果不是本机的话,要先装oracle客户端,然后配tns。
另外,用sys登陆必须用DBA登陆不能用normal登陆。
ORACLE数据库中 表是最基本的内容 可以说 表设计的好坏直接跟数据库的性能相关 所以 在设计表的时候 除了要遵循其固有的数据库准则之外 还需要看个人的数据库管理经验 下面我就把这些经验分享一下 或许对大家有所帮助 一 表该存放在哪里 我们都知道 在ORACLE数据库中 使利用空间这个概念来管理表对象的 在数据库创建的时候 数据库中已经建立了一些表空间 那么当我们新建立表的时候 这个新表的位置该放在什么地方呢这就好像吃饭时的坐的位置一样 是有讲究的 一般来说 我们在新建表的时候 至少要遵循如下建议 一是在数据库创建的时候 在数据库中已经有了一个SYSTEM的表空间 一般情况下 这个表空间中 只包含数据字典及Oracle系统对象 如果我们将我们的表建立在这个空间上的话 那是要降低数据库的性能的 所以 一般我们是不建议用户把表格建立在这个空间上 但是 若我们不只一个人维护数据库 如有八个人共同设计数据库系统时 如何才能保证其他用户不在SYSTEM表空间中建立数据库表格呢最好的办法就是通过权限控制 如我们可以给每个数据库设计人员指定一个默认的表空间 让他们只能在这个表空间中建立表格 如此的话 就能防止他们在SYSTEM表空间中建立自己的数据表格 从而对数据库的运行性能产生不良影响 所以 若给每个用户设置默认表空间的话 那么用户在建立具体的表时 不用具体指定表空间了 二是我们在为某个应用设计数据库的时候 最好先对表的空间进行规划 一般情况下 不要把数据表随意的分散到不同的表空间中去 如我们在为一个ERP系统设计数据库的时候 若把采购部门相关的表跟销售部门相关的表放到两个不同的表空间中去 这是不明智的做法 这么处理的话 会降低某些数据库管理和维护 *** 作的效率 如数据的备份与恢复 *** 作;而且 也无法集中管理属于某个特定应用的数据 所以 我们一般建议 在规划数据库表空间的时候 把相同应用的表放在同一个表空间中去 如果要区分不同部门或者不同模块的表的话 我们可以在表的命名上动脑子 如我们在设计ERP系统的数据库中 可以根据其应用模块的不同 在前面加上前缀来进行识别 如跟系统基本配置相关的表 我们可以用AD为前缀;而跟销售部门相关的表 我们可以加上SA前缀等等 如此的话 这些表具体是属于哪个模块的 就一清二楚了 完全没有必要为此设置不同的表空间 这是ORACLE数据库初学者经常会犯的错误 主要是对ORACLE表空间的定义不是很熟悉所导致的 二 对预计存储数量比较大的表时 要给与额外的重视 有些表非常的大 我们这边说的大 不一定是说结构复杂 而是指在这个表格中 预期会存储比较多的数据 为了提高对这个表格的处理效率 我们在事先要做出一定的安排 否则的话 后续对这些大表进行查询 插入等 *** 作的话 速度会很慢 所以 我们就有必要在数据库设计的时候 先预先估计一下表的数据存储量 把一些数据量大的表格 做一些额外的设置 如在ERP软件的数据库设置中 一般来说 产品数据与物料清单数据这两个表的数据量会比较大;而从长远看的话 销售订单 采购订单 生产订单 记账凭证等这种单据类相关的表格其数据量也会比较大 一年两年可能感觉不出来 但是 到十年后 这个纪录数量就会很庞大 而像ERP系统这种大型的信息化管理项目 用个几十年时很正常的事情 而且 为了记录的完整性 也不建议用户把以前的数据删除 所以 为这种应用进行数据库设计的时候 要充分考虑这些大表的性能问题 具体的来说 设计大表的时候 可以考虑遵循如下的建议 一是不要为大表设置存储的限制 在ORACLE数据库中 可以为每张表格设置存储配额限制 如此的话 表最大容量就不能超过这个限制 对于一些数据容量比较小的表格 这么设置时合理的 可以提高空间的利用率 但是 若数据量比较大的话 就不建议事先设置表的存储空间了 如ERP系统的销售订单表 其刚开始可能记录量很小 第一年预计只有 G的记录容量 但是 估计在十年后 这个记录容量就会达到 G了 在这种情况下 我们怎么来给其设置存储空间呢一开就设置 G空间 这也是不合理的 而且 设置存储空间 就意味着有可能产生存储碎片 从而影响到数据查询的效率 所以 在数据库表的设计过程中 若某些应用的表可能会有比较大的数据容量时 建议不要对其存储空间做出任何的限制 二是要为这大表分配足够的临时空间 如我们使用ERP系统时 要查询产品资料信息 我们都知道 产品信息的话 有些企业这个纪录数非常的庞大 而且在查询时 我们还会经常的进行排序 *** 作 如有时候会按照产品编码对查询出来的数据进行排序 当记录少的话 还好;但是 当记录多的话 这个排序动作 要求具有比较大的临时存储空间 所以 当某个表预计会有很大的记录数量的时候 我们就要给其分配足够多的临时空间 临时空间的存储参数设置取决于临时表空间的默认储存参数设置 我们可以更改这些参数 以达到我们对要求 若没有给大表分配足够多的临时空间的话 则排序的动作将会很慢 而且很可能不成功 三是要考虑将表与表的索引分离存放 大表所对应的索引通常也比较大 一般来说 索引的数量是随着表记录的数量增加而增加 两者是接近于一个正比例的关系 所以 通常表的记录容量大的时候 索引数量也会很庞大 针对这种情况 我们考虑突破我们上面讲的表空间的规则定义 而考虑把表和他的索引分别存储于不同的表空间中 甚至在条件允许的情况下 分别存储于不同的硬盘中 这么做的好处是什么呢最大的好处是让索引比较容易的获得所需要的连续的存储空间 从而提高输入输入的效率 通俗的说 就是可以提高数据的查询效率 如不这么处理的话 查询大容量的记录的话 数据库可能需要花费 秒;而如此设计的话 就可能把时间缩短为 秒 这是一个很明显的性能改善 三 如何给表命名 上面我在讲如何为表分配存储空间的时候 已经讲到过这方面的问题 下面 我就将对这个问题进行详细的描述 以帮助数据库管理员掌握一套好的数据库命名规则 首先 毋庸置疑的 在为标命名的时候 要遵循ORACLE数据库的基本命名规则 如不能以数字开头为表命名 如不能利用数据库的关键字为表命名 如表的名字不能重复等等 这些是最基本的要求 就不用我多费口舌了 除了要遵循这些基本的命名规则外 在实际工作中 为了数据库后续的维护等方面出发 我们还是要遵循一些额外的规则 这些规则跟ORACLE定义的规则不同 我们所讲的规则没有约束力 可以说 只是业界的一些共识而已 你若不怎么处理 ORACLE数据库也不会说你错误 只是后续维护的时候 会比较麻烦而已 一是在对数据库命名的时候 最好能跟体现表的分类关系 如最常见的 我们在设计数据库的时候 表都是按系统的具体模块来区分的 如根据前端系统要求的不同 数据库的表大致可以分为系统基本配置表 销售模块表 采购模块表 报表模块表等等 我们可以根据这些模块的不同 分别给与不同的前缀来区分 这么做的好处是很明显的 如一看到表最大名字 就可以知道这个表是属于哪个应用的 哪个模块的 这无疑可以提高数据库设计与前台软件开发的效率 同时 数据库中默认的排序规则是按名字来排序的 所以 为表格设置类别前缀的话 可以把同一类的表格排在一起 方便我们察看 二是对表格命名的时候 要考虑可读性 而不能随便阿狗阿猫的乱取名字 最常见的是 那些刚学数据库的人 在表命名的时候 如要建几张测试表 就会随便命名如TEST TEST 之类的 虽然这只是测试 但是 也不符合我们的命名过则 要做测试的话 那就以TEST开头 然后后面加上具体要测试的内容 如此的话 我们才可以通过表的名字知道该表具体的用途 而不用打开表去看里面具体的结构或者注释才能知道我们需要的信息 所以 在设计表的名字的时候 还要关注一下其的可读性 lishixinzhi/Article/program/Oracle/201311/18317
数据库安全性问题一直是围绕着数据库管理员的恶梦 数据库数据的丢失以及数据库被非法用户的侵入使得数据库管理员身心疲惫不堪 本文围绕数据库的安全性问题提出了一些安全性策略 希望对数据库管理员有所帮助 不再夜夜恶梦 数据库安全性问题应包括两个部分 一 数据库数据的安全它应能确保当数据库系统DownTime时 当数据库数据存储媒体被破坏时以及当数据库用户误 *** 作时 数据库数据信息不至于丢失 二 数据库系统不被非法用户侵入它应尽可能地堵住潜在的各种漏洞 防止非法用户利用它们侵入数据库系统 对于数据库数据的安全问题 数据库管理员可以参考有关系统双机热备份功能以及数据库的备份和恢复的资料 以下就数据库系统不被非法用户侵入这个问题作进一步的阐述 组和安全性在 *** 作系统下建立用户组也是保证数据库安全性的一种有效方法 Oracle程序为了安全性目的一般分为两类 一类所有的用户都可执行 另一类只DBA可执行 在Unix环境下组设置的配置文件是/etc/group 关于这个文件如何配置 请参阅Unix的有关手册 以下是保证安全性的几种方法 ( ) 在安装Oracle Server前 创建数据库管理员组(DBA)而且分配root和Oracle软件拥有者的用户ID给这个组 DBA能执行的程序只有 权限 在安装过程中SQLDBA系统权限命令被自动分配给DBA组 ( ) 允许一部分Unix用户有限制地访问Oracle服务器系统 增加一个由授权用户组成的Oracle组 确保给Oracle服务器实用例程Oracle组ID 公用的可执行程序 比如SQLPlus SQLForms等 应该可被这组执行 然后该这个实用例程的权限为 它将允许同组的用户执行 而其他用户不能 ( ) 改那些不会影响数据库安全性的程序的权限为 注 在我们的系统中为了安装和调试的方便 Oracle数据库中的两个具有DBA权限的用户Sys和System的缺省密码是manager 为了您数据库系统的安全 我们强烈建议您该掉这两个用户的密码 具体 *** 作如下 在SQLDBA下键入 alter user sys indentified by password;alter user system indentified by password;其中password为您为用户设置的密码 Oracle服务器实用例程的安全性以下是保护Oracle服务器不被非法用户使用的几条建议 ( ) 确保$ORACLE_HOME/bin目录下的所有程序的拥有权归Oracle软件拥有者所有 ( ) 给所有用户实用便程(sqiplus sqiforms exp imp等) 权限 使服务器上所有的用户都可访问Oracle服务器 ( ) 给所有的DBA实用例程(比如SQLDBA) 权限 Oracle服务器和Unix组当访问本地的服务器时 您可以通过在 *** 作系统下把Oracle服务器的角色映射到Unix的组的方式来使用Unix管理服务器的安全性 这种方法适应于本地访问 在Unix中指定Oracle服务器角色的格式如下 ora_sid_role[_dla]其中sid 是您Oracle数据库的oracle_sid role是Oracle服务器中角色的名字 d(可选)表示这个角色是缺省值 a(可选)表示这个角色带有WITH ADMIN选项 您只可以把这个角色 授予其他角色 不能是其他用户 以下是在/etc/group文件中设置的例子 ora_test_osoper_d:NONE: :jim narry scottora_test_osdba_a:NONE: :patora_test_role :NONE: :bob jane tom mary jimbin:NONE: :root oracle dbaroot:NONE: :root词组 ora_test_osoper_d 表示组的名字 词组 NONE 表示这个组的密码 数字 表示这个组的ID 接下来的是这个组的成员 前两行是Oracle服务器角色的例子 使用test作为sid osoper和osdba作为Oracle服务器角色的名字 osoper是分配给用户的缺省角色 osdba带有WITH ADMIN选项 为了使这些数据库角色起作用 您必须shutdown您的数据库系统 设置Oracle数据库参数文件initORACLE_SID ora中os_roles参数为True 然后重新启动您的数据库 如果您想让这些角色有connect internal权限 运行orapwd为这些角色设置密码 当您尝试connect internal时 您键入的密码表示了角色所对应的权限 SQLDBA命令的安全性如果您没有SQLPLUS应用程序 您也可以使用SQLDBA作SQL查权限相关的命令只能分配给Oracle软件拥有者和DBA组的用户 因为这些命令被授予了特殊的系统权限 ( ) startup( ) shutdown( ) connect internal数据库文件的安全性Oracle软件的拥有者应该这些数据库文件($ORACLE_HOME/dbs/ dbf)设置这些文件的使用权限为 文件的拥有者可读可写 同组的和其他组的用户没有写的权限 Oracle软件的拥有者应该拥有包含数据库文件的目录 为了增加安全性 建议收回同组和其他组用户对这些文件的可读权限 网络安全性当处理网络安全性时 以下是额外要考虑的几个问题 ( ) 在网络上使用密码在网上的远端用户可以通过加密或不加密方式键入密码 当您用不加密方式键入密码时 您的密码很有可能被非法用户截获 导致破坏了系统的安全性 ( ) 网络上的DBA权限控制您可以通过下列两种方式对网络上的DBA权限进行控制 A 设置成拒绝远程DBA访问 B 通过orapwd给DBA设置特殊的密码 建立安全性策略系统安全性策略( ) 管理数据库用户数据库用户是访问Oracle数据库信息的途径 因此 应该很好地维护管理数据库用户的安全性 按照数据库系统的大小和管理数据库用户所需的工作量 数据库安全性管理者可能只是拥有create alter 或drop数据库用户的一个特殊用户 或者是拥有这些权限的一组用户 应注意的是 只有那些值得信任的个人才应该有管理数据库用户的权限 ( ) 用户身份确认数据库用户可以通过 *** 作系统 网络服务 或数据库进行身份确认 通过主机 *** 作系统进行用户身份认证的优点有 A 用户能更快 更方便地联入数据库 B 通过 *** 作系统对用户身份确认进行集中控制 如果 *** 作系统与数据库用户信息一致 那么Oracle无须存储和管理用户名以及密码 C 用户进入数据库和 *** 作系统审计信息一致 ( ) *** 作系统安全性A 数据库管理员必须有create和delete文件的 *** 作系统权限 B 一般数据库用户不应该有create或delete与数据库相关文件的 *** 作系统权限 C 如果 *** 作系统能为数据库用户分配角色 那么安全性管理者必须有修改 *** 作系统帐户安全性区域的 *** 作系统权限 数据的安全性策略数据的生考虑应基于数据的重要性 如果数据不是很重要 那么数据的安全性策略可以稍稍放松一些 然而 如果数据很重要 那么应该有一谨慎的安全性策略 用它来维护对数据对象访问的有效控制 用户安全性策略( ) 一般用户的安全性A 密码的安全性如果用户是通过数据库进行用户身份的确认 那么建议使用密码加密的方式与数据库进行连接 这种方式的设置方法如下 在客户端的oracle ini文件中设置ora_encrypt_login数为true 在服务器端的initORACLE_SID ora文件中设置dbling_encypt_login参数为true B 权限管理对于那些用户很多 应用程序和数据对象很丰富的数据库 应充分利用 角色 这个机制所带的方便性对权限进行有效管理 对于复杂的系统环境 角色 能大大地简化权限的管理 ( ) 终端用户的安全性您必须针对终端用户制定安全性策略 例如 对于一个有很多用户的大规模数据库 安全性管理者可以决定用户组分类 为这些用户组创建用户角色 把所需的权限和应用程序角色授予每一个用户角色 以及为用户分配相应的用户角色 当处理特殊的应用要求时 安全性管理者也必须明确地把一些特定的权限要求授予给用户 您可以使用 角色 对终端用户进行权限管理 数据库管理者安全性策略( ) 保护作为sys和system用户的连接当数据库创建好以后 立即更改有管理权限的sys和system用户的密码 防止非法用户访问数据库 当作为sys和system用户连入数据库后 用户有强大的权限用各种方式对数据库进行改动 改动sys和system用户的密码的方法 可参看前面的相关部分 ( ) 保护管理者与数据库的连接应该只有数据库管理者能用管理权限连入数据库 当以sysdba或startup shutdown 和recover或数据库对象(例如create drop 和delete等)进行没有任何限制的 *** 作 ( ) 使用角色对管理者权限进行管理应用程序开发者的安全性策略( ) 应用程序开发者和他们的权限数据库应用程序开发者是唯一一类需要特殊权限组完成自己工作的数据库用户 开发者需要诸如create table create procedure等系统权限 然而 为了限制开发者对数据库的 *** 作 只应该把一些特定的系统权限授予开发者 ( ) 应用程序开发者的环境A 程序开发者不应与终端用户竞争数据库资源 B 用程序开发者不能损害数据库其他应用产品 ( ) free和controlled应用程序开发应用程序开发者有一下两种权限 A free development应用程序开发者允许创建新的模式对象 包括table index procedure package等 它允许应用程序开发者开发独立于其他对象的应用程序 B controlled development应用程序开发者不允许创建新的模式对象 所有需要table indes procedure等都由数据库管理者创建 它保证了数据库管理者能完全控制数据空间的使用以及访问数据库信息的途径 但有时应用程序开发者也需这两种权限的混和 ( ) 应用程序开发者的角色和权限 lishixinzhi/Article/program/Oracle/201311/16746
安全的实现 在多用户环境中 有效管理Oracle数据库最重要的方面就是创建一个安全模式来控制对数据库的访问和更改 在一个Oracle中 可以对单独的用户或数据库角色授予安全许可 安全管理一般在 个级别中执行 ·数据库级· *** 作系统级·网络安全级 用户名 权限 组和角色 DBA或数据库安全管理员创建用户名(username)来提供有效的用户标识符 用来和数据库连接 在安装过程中自动创建两个赋予DBA角色的用户账号 SYS和SYSTEM 角色(role)是权限的命名组 可以被创建 更改或删除 在大多数实现中 DBA或安全管理员为用户创建用户名并分配角色 从而赋予用户一个权限集 每个数据库都有个伪角色 称为PUBLIC 它包含所有的拥护 所有的用户都可以赋予PUBLIC权限 如果通过关键字PUBLIC创建了数据库链接 那么对于所有用户这些链接都是可见的 安全权限 有 个基本的安全权限可适用于Oracle数据库中的数据 ·SELECT 执行查询·INSERT 在表或视图中插入行·UPDATE 更新表或视图中的行·DELETE 从表 表分区或视图中删除行除了这些数据特定的权限外 还有以下用于数据库模式中对象的权限 ·CREATE 在模式中创建表·DROP 在模式中删除表·ALTER 更改表或视图所有权限都是通过两个SQL命令来处理 GRANT命令把一个特定的权限赋予一个用户或角色 REVOKE命令用于取消某个特定的权限其中任何一个命令都可以结合关键字PUBLIC对所有的用户赋予或取消某个权限 默认角色和权限 默认角色和权限集是Oracle安装过程中预先定义的每个版本的默认角色都有所变化CONNECT可用于注册登录到数据库 创建对象和执行导出 RESOURCE可用于创建过程 触发器 以及用户模式区内的类型 DBA赋予无限制的权限 SYSOPER权限集 允许远程地建立与数据库的连接 并执行有限的已授权的 *** 作 包括启动和关闭 SYSDBA权限集 和DBA角色十分相近 包含了SYSOPER权限集以及ADMIN OPTION所有的权限 可用于与远程数据库连接 并远程执行已授权的 *** 作 如关闭或启动数据库 EXP_FULL_DATABASE允许执行任何数据库对象导出 *** 作 并且将导出 *** 作记录在数据字典中 IMP_FULL_DATABASE可用于成为数据库的用户 这样用户的对象就可以导入适当的模式内 DELETE_CATALOG_ROLE可用于从SYS AUD$审计表中删除行 EXECUTE_CATALOG_ROLE可用于执行恢复目录中列出的所有导出包 SELECT_CATALOG_ROLE可用于从所有导出恢复目录视图和表中选择角色 RECOVERY_CATALOG_OWNER可用于创建恢复目录的所有者 SNMPAGENT可用于Oracle企业智能代理 DBA角色STARTUP启动一个数据库实例 SHUTDOWN关闭数据库实例 ALTER DATABASE OPEN打开一个已安装的但是关闭的数据库 ALTER DATABASE MOUNT通过前面的启动实例来安装一个数据库 ALTER DATABASE BACKUP例如 启动一个控制文件的备份 但是现在用的大多是通过RMAN来备份ALTER DATABASE ARCHIVELOG指定在日志文件组可以重用之前 日志文件组的内容必须归档 ALTER DATABASE RECOVER逐个地应用日志或启动日志文件的自动化应用 CREATE DATABASE创建并命名一个数据库 指定数据文件和大小 并指定日志文件及其大小 还要设置参数限制RESTRICTED SESSION可用于与受限(Restricted)模式中启动的数据库相连接 设计受限模式的目的是使用户避免进行某些数据库 *** 作DBA角色的权限一般用于对用户分配表空间配额 设置系统资源限制以及建立审计 安全审计 lishixinzhi/Article/program/Oracle/201311/16942
select jige/(jige+bujige)
from(
select count ( case when score>=60 then
1
end case
) as jige,
count ( case when score<60 then
1
end case) as bujige
from a
)
以上就是关于oraclecount一直出不来数量,如何优化全部的内容,包括:oraclecount一直出不来数量,如何优化、关于oracle 数据库 的问题、怎样管理好ORACLE数据表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)