Author: mac

  • Oracle 手动创建数据库

    本文永久链接地址: https://www.askmac.cn/archives/oracle-手动创建数据库.html ‎   Oracle 手动创建数据库   了解创建数据库的前提条件 使用 Oracle Database Configuration Assistant 创建数据库 手动创建数据库 使用“Oracle 管理文件”(Oracle Managed Files) 创建数据库   管理和组织数据库 计划数据库是管理数据库系统的第一步 –确定数据库的用途 –确定数据库的类型 –概括数据库的体系结构设计 –选择数据库名称 创建数据库 使用 Oracle Data Migration Assistant 可以从较早的数据库版本进行移植 计划数据库是组织和实施数据库系统的第一步。首先要确定数据库的用途,这就需要根据业务要求来确定应该创建哪种数据库类型。数据库类型包括数据仓库、用于高效的联机事务处理或用于通用目的的数据库。确定了用途和类型后,接下来就是概括要应用的数据库体系结构。例如:如何组织和存储数据文件、控制文件和重做日志文件?Oracle 的 “最佳灵活体系结构” (Optimal Flexible Architecture) 可以帮助您安排数据库文件的结构和位置。定义了体系结构之后,您必须为新的数据库选择数据库名称和系统标识名。 数据库创建这项任务可用来准备一些操作系统文件,创建只需一次,这与数据库中的数据文件数量无关。 从较早版本的 Oracle 数据库进行移植时,除非需要一个全新的数据库,否则不必创建数据 库。如果不必创建数据库,则可以使用移植实用程序。Oracle Data Migration Assistant 就是 这样的工具,它可以协助您移植当前的数据库系统。   最佳灵活体系结构 (OFA) Oracle…

  • Oracle SQL解释执行计划 execution plan

    本文永久链接地址:https://www.askmac.cn/archives/sql-execution-plan-1.html   收集执行计划 显示执行计划 解释执行计划 什么是执行计划 SQL 语句的执行计划由多个小构建块组成,这些小构建块称为串行执行计划的行源。 语句的行源组合称为执行计划。 可以使用父 – 子关系,以树状结构(文本或图形方式) 显示执行计划。 执行计划是优化程序的输出,供执行引擎实施。它指出了执行引擎必须执行的操作,从而使其能以最有效的方式检索查询所需的数据。 EXPLAIN PLAN 语句收集 Oracle 优化程序为 SELECT、UPDATE、INSERT 和 DELETE 语句选择的执行计划。执行计划的步骤并不按编号顺序执行。步骤之间存在父 – 子关系。行源树是执行计划的核心,它显示下列信息: 语句所引用的表的顺序 语句中提到的每个表的访问方法 受语句中的联接操作影响的表的联接方法 数据操作,如过滤、排序或聚集 除行源树(或并行操作的数据流树)外,计划表还包含有关以下事项的信息: 优化,如每项操作的成本和基数 分区,如一组访问分区 并行执行,如联接输入的分布方法 借助 EXPLAIN PLAN 的结果,您可以确定优化程序是否选择了特定执行计划,如嵌套循环联接。   在哪里可以找到执行计划   PLAN_TABLE(EXPLAIN PLAN 或 SQL*Plus 自动跟踪) V$SQL_PLAN(库高速缓存) V$SQL_PLAN_MONITOR (11g) DBA_HIST_SQL_PLAN (AWR) STATS$SQL_PLAN (Statspack) SQL 管理库(SQL 计划管理基线)…

  • oracle中管理表

    本文永久链接地址: https://www.askmac.cn/archives/oracle-manage-table.html ‎ 辨别各种存储数据的方法 概括各种 Oracle 数据类型 区分扩展的和受限的 ROWID 概括行的结构 创建规则表和临时表 管理表内的存储结构 重新组织、截断和删除表 删除表内的列 存储用户数据   在 Oracle 数据库中有几种存储用户数据的方法: 常规表 分区表 按索引组织的表 集簇表 注:分区表、按索引组织的表和集簇表在其它课程中进行阐述。 常规表: 常规表(通常称为“表”)是存储用户数据最常用的形式。它是缺省表,并且是本课论述的重点。数据库管理员对表中行分布的控制很有限。行可能按任意顺序存储,具体顺序取决于在表中进行的操作。   分区表: 分区表使您可以生成可伸缩的应用程序。它具有以下特征: 每个分区表有一个或多个分区,每个分区存储已分区(使用范围分区、散列分区、组合分区或列表分区)的行。 分区表中的每个分区为一个段,可各自位于不同的表空间中。 对于能够同时使用几个进程进行查询或操作的大型表,分区非常有用。 有一些特殊的命令可用来管理一个表内的分区。 按索引组织的表: 按索引组织的表就像在一个或多个列中具有主键索引的堆表。但是,按索引组织的表并不为表和 B 树索引维护两个单独的存储空间,而是仅维护一个包含表主键和其它列值的 B 树。由于设置 PCTTHRESHOLD 值以及较长的行长度需要溢出区域,所以可能存在溢出段。 按索引组织的表为进行涉及精确匹配和范围搜索的查询,提供基于键的、对表数据的快速访问。 此外,存储要求也降低了,因为键列在表和索引中不重复。除非索引条目变得非常大,否则其余的非键列就存储在索引中;在此情况下,Oracle 服务器提供 OVERFLOW 子句来处理此问题。 集簇表: 集簇表为存储表数据提供另一种可选的方法。簇由一个表或共享相同数据块的一组表构成,它们之所以被组织在一起,是因为它们共享共同的列并且经常一起使用。 簇具有以下特征: 簇有一个集簇键,用来标识需要存储在一起的多个行。 集簇键可由一个或多个列组成。 簇中的表具有与集簇键相对应的列。 集簇是一种对使用表的应用程序透明的机制。可以象操作存储在常规表中的数据那样操作集簇表中的数据。 更新集簇键中的一列可能需要移植该行。 集簇键独立于主键。簇中的表可有一个主键,它可以是集簇键,也可以是另一组列。…

  • v$session.sql_id为NULL或不准确的BUG

    v$SESSION是我们常用的动态性能视图之一,其SQL_ID字段常用来检测会话当前执行的SQL语句,但在少数版本中V$SESSION的SQL_ID列可能不正常地显示SQL_ID,一般是在Session Active或执行Pl/SQL的时候SQL_ID为NULL,以下是部分相关的部分BUG列表:   BUG# Affected Version Symptom Fix Version Bug 13068790 – the value of v$session.sql_id of active session is null [ID 13068790.8] 11.2.0.2.4 Patch Set Update 11.2.0.2.3 Patch Set Update 11.2.0.2.1 Patch Set Update 11.2.0.2 11.2.0.1 active session’s sql_id, sql_address may be null or 0 out while a recursive call is executing. 11.2.0.3 (Server…

  • 11.2.0.3 实例启动现在提供Large Pages Information大内存页信息了

    刚才发现在目前最新的11.2.0.3版本中实例instance startup时alert.log 中会提供Large Pages Information 大内存页的信息了:   Starting ORACLE instance (normal) ****************** Large Pages Information ***************** Total Shared Global Region in Large Pages = 0 KB (0%) Large Pages used by this instance: 0 (0 KB) Large Pages unused system wide = 0 (0 KB) (alloc incr 16 MB) Large Pages configured system wide =…

  • Script:10g中不用EM显示Active Session Count by Wait Class

    在<11g中AWR新快照视图>一文中我介绍了作为新特性加入11g的一些动态性能视图,另外也提及了通过一个SQL脚本就可以不打开EM界面而显示ASH的按等待类型(Wait Class)累计的Active Session Count,实际在EM中图形化的效果是这样的:     在11g 中可以使用如下SQL从命令行获得实例每分钟的AAS信息(注意没有对后台进程做过滤,所以是Foreground + Background 的模式):   set echo off; set verify off; alter session set nls_date_format=’HH24:MI’; select * from (select nvl(wait_class, ‘CPU’) activity, trunc(sample_time, ‘MI’) time from v$active_session_history) v pivot(count(*) for activity in(‘CPU’ as “CPU”, ‘Concurrency’ as “Concurrency”, ‘System I/O’ as “System I/O”, ‘User I/O’ as “User I/O”, ‘Administrative’…

  • Script:数据库最近的性能度量

    以下SQL脚本可以用于列出数据库最近1分钟的性能度量信息(performance metric): set linesize 80 pagesize 1400 SELECT /*+ ORDERED USE_MERGE(m) */ TO_CHAR(FROM_TZ(CAST(m.end_time AS TIMESTAMP), TO_CHAR(systimestamp, ‘tzr’)) AT TIME ZONE sessiontimezone, ‘YYYY-MM-DD HH24:MI:SS’), SUM(CASE WHEN a.internal_metric_name = ‘transactions_ps’ THEN m.value ELSE 0 END) transactions_ps, SUM(CASE WHEN a.internal_metric_name = ‘physreads_ps’ THEN m.value ELSE 0 END) physreads_ps, SUM(CASE WHEN a.internal_metric_name = ‘physreads_pt’ THEN m.value ELSE 0 END)…

  • Oracle在 RAC 中管理备份和恢复

    学完本课后,应能完成以下工作: 配置 RAC 数据库,以使用 ARCHIVELOG 模式和快速恢复区 为 RAC 环境配置 RMAN RAC 备份和恢复与其它 Oracle DB 备份和恢复操作几乎完全相同。这是因为您备份和恢复的是单个数据库。主要区别在于:在 RAC 中,您需要处理多个重做日志文件线程。   防止介质故障   尽管 RAC 提供了多种方法,用于避免或减少由于一个或多个(但并非全部)实例发生故障而导致的停机时间,但仍需要对数据库本身加以保护,因为该数据库由所有实例所共享。这意味着您需要考虑集群数据库的磁盘备份和恢复策略,就像对非集群化数据库考虑的那样。 为了最大限度地减少由于磁盘故障而导致的潜在数据损失,您可能需要使用磁盘镜像技术(可从服务器或磁盘供应商处获得)。与在非集群化数据库中一样,只要供应商允许,便可以使用多个镜像,以帮助减少潜在的数据损失并提供替代备份策略。例如,如果您的数据库处于 ARCHIVELOG 模式并且有三个磁盘副本,则可以删除一个镜像副本并从该副本执行备份,而其余两个镜像副本可以继续保护实时磁盘活动。要正确地执行此操作,必须首先将表空间置于备份模式,然后,如果集群或磁盘供应商要求,可通过发出 ALTER SYSTEM SUSPEND 命令来暂时中断磁盘操作。该语句完成后,可以中断镜像,然后通过执行 ALTER SYSTEM RESUME 命令并使表空间脱离备份模式来恢复正常操作。     归档日志文件配置   在需要使用归档日志文件的备份和恢复操作期间,Oracle 服务器将根据控制文件来确定文件目的地和名称。如果使用 RMAN,还可以将归档日志文件路径名存储在可选恢复目录中。但是,归档日志文件路径名不包含节点名,因此 RMAN 会预期在分配通道的节点上找到这些文件。 如果使用集群文件系统,则可以将所有实例都写入到同一归档日志目的地。这称为集群文件系统方案。归档日志的备份和恢复非常容易,因为所有日志都位于同一目录中。 如果集群文件系统不可用,则 Oracle 会建议为每个实例创建本地归档日志目的地,这些目的地具有指向其它所有实例的 NFS 读取装载点。这称为具有网络文件系统 (NFS) 方案的本地归档。在备份期间,可以从每个主机备份归档日志,也可以选择一个主机来执行所有归档日志的备份。在恢复期间,一个实例可以从任一主机访问这些日志,而不必先将其复制到本地目的地。 无论使用哪种方案,可能都需要提供另一个归档目的地,以避免出现单点故障。   RAC 和快速恢复区…

  • Oracle Certified Master For Java EE 5/6 Comes

    今天刚发现原来Java EE 也有Oracle Certified Master(OCM)认证了:   Oracle Certified Master, Java EE 5 Enterprise Architect (includes Sun Certified Enterprise Architect (SCEA) Oracle Certified Master, Java SE 6 Developer (includes Sun Certified Programmer (SCJP)   见OTN的Ocm Profile 页面:     不过目前就这2个认证的花名册显示似乎还没有获得者在OTN上注册过:           Ocm就仅仅是一项认证, 它不能说明持有者的技术水平有多高(虽然我也是), 有些人对认证嗤之以鼻,并且举出这些认证持有者的种种糗事来支持证书无用的观点。 这无可厚非,但是有这么一项认证, 总要比空口无凭的说”我们公司的某某某技术十分好,哪里的谁谁谁水平很高”  来得有力得多。 何况在我眼中,”技术很好” 现在已经完全是一句空话了, 常被用在乙方向甲方介绍外包人才时使用。 这是我对认证的一点不成熟的看法。  

  • Script:收集数据库中用户的角色和表空间等信息

    以下脚本可以用于收集数据库中用户的角色和表空间等信息(user_role_tbs.sql):   SET pagesize 50 linesize 115 REM COLUMN username format a10 heading User COLUMN default_tablespace format a12 heading Default COLUMN temporary_tablespace format a12 heading Temporary COLUMN granted_role format a25 heading Roles COLUMN default_role format a10 heading Default? COLUMN admin_option format a7 heading Admin? COLUMN profile format a12 heading Profile REM BREAK on username skip…