oralce的知识点总结

oralce的sga会分割内存

在 Oracle 数据库中,系统全局区(SGA,System Global Area)是一个共享内存区域,用于存储数据库的运行时信息。SGA 的内存会被划分为多个组件,每个组件负责不同的功能。以下是 SGA 的主要组成部分:

  1. 数据库缓冲区缓存(Database Buffer Cache)
  • 用于存储从磁盘读取的数据块,以减少对磁盘的访问,提高性能。
  1. 共享池(Shared Pool)
  • 存储解析过的 SQL 语句、PL/SQL 代码、数据字典信息等,旨在提高重用率,减少解析开销。
  1. 重做日志缓冲区(Redo Log Buffer)
  • 存储未写入到重做日志文件的更改,以确保数据的持久性和恢复能力。
  1. 大对象(Large Object)缓存(Large Pool)
  • 用于支持大对象(LOB)的操作,尤其是用于并行处理和备份操作。
  1. Java 池(Java Pool)
  • 为 Java 程序提供内存支持,存储 Java 运行时环境所需的信息。

SGA 内存分配

  • SGA 的总大小可以在初始化参数中设置,具体的组件大小可以通过参数进行调整,如 DB_CACHE_SIZESHARED_POOL_SIZE 等。

动态调整

Oracle 还支持自动内存管理(AMM),通过设置 MEMORY_TARGETMEMORY_MAX_TARGET 参数,可以动态调整 SGA 和 PGA(程序全局区)的大小,以优化性能。

总结

SGA 的分割与管理是 Oracle 数据库性能优化的重要组成部分,合理配置各个组件的大小,有助于提升数据库的整体性能。

Oracle死锁操作

在 Oracle 数据库中,处理和分析死锁的操作步骤可以按以下方式进行。以下是您提到的查询步骤的详细说明。

  1. 查看死锁相关信息

使用 DBA 用户执行以下查询,以查看死锁会话的信息:

sqlCopy CodeSELECT 
    username,
    lockwait,
    status,
    machine,
    program,
    process 
FROM 
    gv$session 
WHERE 
    sid IN (SELECT session_id FROM gv$locked_object);

查询结果解释:

  • Username:执行死锁操作的数据库用户。
  • Lockwait:表示当前会话等待的锁。如果这个字段有内容,则表示该会话正在等待资源,可能处于死锁状态。
  • Status:如果状态为 ACTIVE,则说明该会话处于活动状态,可能被死锁。
  • Machine:指示发生死锁的机器名称。
  • Program:指示产生死锁的应用程序。
  • Process:操作系统中的进程ID。
  1. 查看被死锁的 SQL 语句

要查找引发死锁的具体 SQL 语句,可以使用以下查询。这通常涉及到查看 V S Q L 和 V SQL 和 V SQLVSESSION 视图。

sqlCopy CodeSELECT 
    s.sid,
    s.serial#,
    s.username,
    s.status,
    s.machine,
    s.program,
    q.sql_text 
FROM 
    gv$sql q, 
    gv$session s 
WHERE 
    s.sql_id = q.sql_id 
    AND s.lockwait IS NOT NULL;

查询结果解释:

  • SID 和 SERIAL#:用于唯一标识会话。
  • Username:执行该 SQL 语句的数据库用户。
  • Status:会话状态。
  • Machine 和 Program:与上面的解释相同。
  • SQL_TEXT:显示导致死锁的 SQL 语句。
  1. 死锁的后续处理

一旦识别出死锁的会话和 SQL 语句,您可以:

  • 记录日志:将死锁信息记录到日志中,以便后续分析。
  • 优化 SQL 语句:分析被锁定的 SQL,考虑是否可以优化以减少锁竞争。
  • 调整事务逻辑:确保应用程序以一致的顺序获取锁,以减少死锁的可能性。

通过这些步骤,您可以有效地监控和处理 Oracle 数据库中的死锁情况。

Oracle双机热备

为了设置Oracle双机热备(自管理备用库),可以按照以下步骤进行配置:

1. 创建主库的数据文件冷备份

在主库上执行以下命令,备份数据文件到指定目录(例如e:\shared\back):

-- 以SYSDBA身份连接
SQL> connect sys/password as sysdba;

-- 将数据库置于关闭状态
SQL> shutdown immediate;

-- 备份数据文件
-- (手动复制或使用操作系统命令(如xcopy或copy)将数据文件备份到指定目录e:\shared\back。
例如:xcopy d:\oracle\oradata\orcl\* e:\shared\back\ /s)

-- 启动数据库
SQL> startup;

2. 创建备用库的控制文件

在主库上生成备用控制文件:

以SYSDBA身份连接到主库
SQL> connect sys/password as sysdba;

使用初始化参数文件启动主库
SQL> startup pfile='d:\oracle\admin\orcl\init.ora';

创建备用控制文件
SQL> alter database create standby controlfile as 'e:\shared\back\stby_ctl.ctl';

完成以上步骤后,你的主库数据文件已成功备份,同时备用库的控制文件也已创建。
注意事项
确保在执行备份和创建控制文件的过程中,相关路径存在并具有适当的权限。
备份完成后,建议验证备份文件的完整性,以确保可以顺利恢复。

3. 通过网络复制备份的数据文件和备用控制文件到备库主机

使用操作系统命令(如scprsync)将备份的数据文件和控制文件复制到备用库的相应目录。

4. 配置主库的tnsnames.ora文件

在主库的tnsnames.ora中添加备用库的别名:

stby1 = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.30)(PORT = 1523))
    (CONNECT_DATA =
      (SID = Orcl)
    )
  )

5. 配置备用库的listener.ora文件

在备用库的listener.ora中添加以下内容:

LISTENER =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.30)(PORT = 1523))
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = Orcl)
      (ORACLE_HOME = d:\oracle\ora81)
    )
  )
这个文件中只能有这两节,不能有多个组,虽然可以定义监听的名字不同,但在启动监听服务的时候,都只启动一个监听服务。

6. 重新启动备用库监听服务

在命令行中执行以下命令:

DOS>lsnrctl                # 启动监听服务管理程序
LSNRCTL>status        # 查看监听服务状态
LSNRCTL>stop            # 停止监听服务
LSNRCTL>start            # 启动监听服务

7. 配置主库的初始化参数文件

在主库的init.ora中修改归档目的地:

# 定义本地归档路径,强制归档,重试时间2秒
log_archive_dest_1 = “location=e:\log\ mandatory reopen=2”
log_archive_dest_state_1 = enable
# 定义归档到备用库,强制归档,重试时间15秒。
# 如果定义为可选状态(optional),那么在归档失败后不会再次尝试归档的。定义
# 为madatory状态后,如果本次归档失败,则在归档下一个日志时会再次尝试
# 重传上一个未成功归档的日志。
log_archive_dest_2 = “service=stby1 mandatory reopen=15”
log_archive_dest_2 = enable
# 定义必须成功归档的日志数,只需要本地成功归档即可
log_archive_min_succeed_dest = 1

8. 使主库修改后的参数生效

在主库上运行以下命令:

SQL> alter system set log_archive_dest_1 = 'location=e:\log mandatory reopen=2';
SQL> alter system set log_archive_dest_state_1 = 'enable';
SQL> alter system set log_archive_dest_2 = 'service=stby1 mandatory reopen=15';
SQL> alter system set log_archive_dest_state_2 = 'enable';
SQL> alter system set log_archive_min_succeed_dest = 1;

9. 配置备用库的初始化参数文件

将主库的init.ora复制到备用库,并做如下修改:

log_archive_dest = e:\log
log_archive_trace = 6        #定义日志跟踪层次
standby_archive_dest = e:\log
# 更改控制文件名
control_files = (“d:\oracle\oradata\orcl\stby_ctl.ctl”)

10. 启动备用库

在备用库上执行以下命令:

SQL> connect sys/password as sysdba;
SQL> startup nomount;
SQL> alter database mount standby database;

11. 手动恢复缺失的日志序列(如果有)

在数据库备份和恢复的过程中,尤其是在Oracle数据库中,日志序列的完整性至关重要。以下是你提供的内容的解释:

  1. 日志序列缺失的手动恢复

如果发现备库的日志序列有缺失,首先需要将主库中的归档日志复制到备库的日志目录。这可以通过手动操作完成,确保备库能够获取到所需的日志文件进行恢复。

  1. 恢复命令
  • SQL> recover automatic standby database;
    这是用于自动恢复备库的命令。
  • SQL> recover standby database until cancel;
    该命令允许你在恢复过程中手动控制,直到你选择取消为止。
  1. 检查日志序列是否缺失

使用SQL查询来检查日志序列是否存在缺失的情况:

SELECT high.thread#, "LowGap#", "HighGap#"
FROM
(
    SELECT thread#, MIN(sequence#)-1 "HighGap#"
    FROM
    (
        SELECT a.thread#, a.sequence#
        FROM v$archived_log a,
        (
            SELECT thread#, MAX(next_change#) gap1
            FROM v$log_history
            GROUP BY thread#
        ) b
        WHERE a.thread# = b.thread#
        AND a.next_change# > b.gap1
    )
    GROUP BY thread#
) high,
(
    SELECT thread#, MIN(sequence#) "LowGap#"
    FROM
    (
        SELECT thread#, sequence#
        FROM v$log_history, v$datafile
        WHERE checkpoint_change# <= next_change#
        AND checkpoint_change# >= first_change#
    )
    GROUP BY thread#
) low
WHERE low.thread# = high.thread#;
  1. 查询结果解读
  • LowGap#:表示当前线程中最低的缺失序列号。
  • HighGap#:表示当前线程中最高的缺失序列号。

如果同一个 thread#LowGap#HighGap# 不相等,说明存在日志序列的缺失。如果这两个值相等,或者查询结果为空,表明没有缺失的日志序列。

  1. 总结

这个过程是为了确保备库能够正确应用来自主库的事务日志,从而保持数据的一致性。如果发现缺失,需要及时进行手动恢复,以保证备库的可靠性和完整性。

12. 将备库置于自管理模式

最后,执行以下命令以将备库置于自管理模式:

SQL> alter database recover managed standby database using current logfile disconnect from session;
  1. 将备库置于自管理模式
  • 命令: SQL> recover managed standby database;

    此命令用于启动备库的自管理恢复模式。在这个模式下,备库将自动从主库接收归档日志并应用这些日志,以保持数据一致性和实时同步。这意味着备库会持续运行,直到你手动终止该模式。

  1. SQL*Plus窗口的停止响应

当执行上述命令后,SQL*Plus窗口会停止响应。这是因为系统在执行恢复操作并等待日志的到来。此时,备库正在后台处理日志,而用户界面不再接受其他输入。

  1. 取消自管理模式
  • 命令: SQL> recover managed standby database cancel;

    如果你需要停止备库的自管理恢复模式,可以使用这个命令。执行后,备库将停止接收和应用日志,并返回到可以接受其他操作的状态。这通常用于进行管理操作或维护任务。

  1. 总结

将备库置于自管理模式是确保数据实时同步的重要手段,而取消该模式则为管理员提供了灵活性,以便进行其他必要的操作。

Oracle数据库导入导出——expdp/impdp

在Oracle数据库中,expdp(数据泵导出)和impdp(数据泵导入)是用于数据导出与导入的工具。它们比传统的expimp工具更高效、更灵活。以下是对expdpimpdp的详细解释:

数据泵导出 (expdp)

  1. 基本用法

expdp用于将数据从Oracle数据库导出到操作系统文件中。

示例命令:

expdp username/password schemas=your_schema directory=data_pump_dir dumpfile=your_dump_file.dmp logfile=export_log.log
  • username/password: 数据库用户名和密码。
  • schemas: 指定要导出的模式(schema)。
  • directory: 指定一个数据库目录对象,用于存储导出文件。
  • dumpfile: 导出生成的转储文件名。
  • logfile: 导出日志文件名,用于记录操作的详细信息。
  1. 参数选项
  • tables: 导出特定表。
  • full: 导出整个数据库。
  • content: 控制导出的内容(例如:ALL, DATA_ONLY, METADATA_ONLY)。

数据泵导入 (impdp)

  1. 基本用法

impdp用于将数据从操作系统文件导入到Oracle数据库中。

示例命令:

impdp username/password schemas=your_schema directory=data_pump_dir dumpfile=your_dump_file.dmp logfile=import_log.log
  • username/password: 数据库用户名和密码。
  • schemas: 指定要导入数据的模式(schema)。
  • directory: 指定一个数据库目录对象,包含导入的转储文件。
  • dumpfile: 导入的转储文件名。
  • logfile: 导入日志文件名,用于记录操作的详细信息。
  1. 参数选项
  • tables: 导入特定表。
  • full: 导入整个数据库。
  • remap_schema: 重新映射导入的模式。
  1. 创建目录对象

在使用expdpimpdp之前,需要确保在数据库中创建了一个目录对象,并且用户具有对此目录的读写权限。

CREATE DIRECTORY data_pump_dir AS '/path/to/directory';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO username;
  1. 注意事项
  • 确保Oracle数据库版本支持数据泵功能。
  • 导出和导入操作可能会受到权限的影响,因此确保用户有足够的权限。
  • 导出文件通常为.dmp格式,日志文件为.log格式。
  1. 总结

expdpimpdp是Oracle数据库中非常强大的工具,能够高效地进行数据导出和导入,支持多种选项以满足不同的需求。通过合理使用这些工具,可以实现数据的备份、迁移和恢复等操作。

指定用户导入,如果有多个用户,按每个用户分别执行导入。

——如果目标库为新建的空库,还没有数据表的时候,可采用下面语句直接导入 (注意红字部分的格式,只有一个实例时,不要写成sbnetdba/passwd@netdb):

impdp sbnetdba/passwd DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=sbnetdba

——如果目标数据库中已有表存在,我们只想覆盖原有数据,则需加入table_exists_action= REPLACE参数,否则数据不会被覆盖。具体命令如下:

impdp sbnetdba/passwd directory=dpdata1 dumpfile=EXPDP.DMP table_exists_action= REPLACE schemas=sbnetdba

——导出完成后,会生产import.log日志文件,记录导出信息,如有疑问可用来分析。

——使用remap_schema=mamdba:sbnetdba参数,前面是源SCHEMA 后面是导入目标schema,即把数据以mamdba schema导出,

Oracle 视图

在Oracle数据库中,视图是一种虚拟表,它是基于SQL查询结果集的逻辑结构。视图并不存储数据本身,而是存储了查询的SQL语句。当查询视图时,Oracle会执行该SQL语句并返回结果。

  1. 视图的基本概念
  • 虚拟表: 视图表现得像一个真实的表,但实际上并不存储数据。
  • 基于查询: 视图的内容由定义它时的SELECT查询结果决定。
  • 简化复杂查询: 通过将复杂的查询封装在视图中,可以简化应用程序和用户的访问。
  1. 视图的类型
  • 简单视图: 基于单个表的视图,不包含聚合函数或分组等复杂操作。
  • 复杂视图: 可以基于多个表,可能包含连接、聚合函数、分组等。
  1. 创建视图

使用 CREATE VIEW 语句来创建视图:

CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;

示例

CREATE VIEW employee_view AS
SELECT emp_id, emp_name, department
FROM employees
WHERE status = 'active';
  1. 使用视图
  • 查询视图:
SELECT * FROM employee_view;
  • 更新视图: 简单视图可以用于INSERT、UPDATE和DELETE操作,但复杂视图通常不支持这些操作。
  1. 管理视图
  • 修改视图: 使用 CREATE OR REPLACE VIEW 来修改视图定义。
CREATE OR REPLACE VIEW employee_view AS
SELECT emp_id, emp_name, department, salary
FROM employees
WHERE status = 'active';
  • 删除视图: 使用 DROP VIEW 语句删除视图。
DROP VIEW employee_view;
  1. 视图的优势
  • 安全性: 可以限制用户访问特定数据,通过视图只展示用户需要的数据。
  • 简化复杂性: 将复杂的查询逻辑封装在视图中,简化数据访问。
  • 数据抽象: 提供一种从物理表中隐藏数据结构的方式,增强数据的抽象性。
  1. 注意事项
  • 性能考虑: 视图的性能依赖于底层查询的复杂性。复杂视图可能导致性能下降。
  • 可更新性: 并非所有视图都是可更新的,具体取决于视图的定义和涉及的表。
  • 依赖关系: 如果基础表结构发生变化(如列删除),依赖于该表的视图可能会失效。
  1. 物化视图

物化视图是另一种视图类型,它存储了查询结果,可以提高性能,尤其是在处理大量数据时。

  • 创建物化视图:
CREATE MATERIALIZED VIEW materialized_view_name AS
SELECT column1, column2
FROM table_name;
  • 刷新物化视图: 数据不会自动更新,需要手动刷新以保持数据最新。
REFRESH MATERIALIZED VIEW materialized_view_name;

总结

视图是Oracle数据库中非常有用的功能,通过视图可以简化数据访问、安全控制和数据抽象。在使用视图时,需要注意其性能和可更新性,以确保满足应用需求。

DBA_2PC_NEIGHBORS 包含待处理事务进入连接和退出连接信息。 
DBA_2PC_PENDING 包含等待恢复的分布式事务的信息。 
DBA_ALL_TABLES 显示数据库中所有表(对象表和关系表)的描述。 
DBA_ANALYZE_OBJECTS 列出分析对象。 
DBA_ASSOCIATIONS 列出用户定义的统计信息。 
DBA_AUDIT_EXISTS 列出由AUDIT NOT EXISTS(不存在审计)和AUDIT EXISTS(存在审 
计)产生的审计跟踪条目。 
DBA_AUDIT_OBJECT 包含系统中所有对象的审计跟踪记录。 
DBA_AUDIT_SESSION 列出关于CONNECT(连接)和DISCONNECT(断开连接)的所有审讯跟踪记录。 
DBA_AUDIT_STATEMENT 列出关于GRANT(授权)、REVOKE(取消)、AUDIT〔审计〕、NOAUDIT(不审计)和ALTER SYSTEM(改变系统)语句的审记跟踪记录。 
DBA_AUDIT_TRAIL  列出所有的审记跟踪条目。 
DBA_BLOCKERS  列出所有人等待一个会话持有的锁的所有会话,但并非它们自己在等待一个锁。 
DBA_CATALOG 列出所有数据库表、视图、同义词和序列。 
DBA_CLU_COLUMNS 列出表列到簇列的映射。 
DBA_CLUSTER_HASH_EXPRESSIONS 列出所有簇的散列(hash)函数。 
DBA_CLUSTERS 包含数据库中所有族的描述。 
DBA_COL_COMMENS 列出所有表和视图列的注解。 
DBA_COL_PRIVS 列出数据库中授予列的所有权限。 
DBA_COLL_TYPES 显示数据库中所有命名的集合类型,如VARRAY(数组)、嵌套表、对象表,等等; 
DBA_CONS_COLUMNS 包含在约束定义中的,可访问的列的信息 
DBA_CONSTRAINTS 包含所有表上的约束定义。 
DBA_CONTEXT 列出所有上下文名字空间的信息。 
DBA_DATA_FILES 包含有关数据库文件的信息 
DBA_DB_LINKS 列出数据库中的所有数据库链接。 
DBA_DDL_LOCKS 列出数据库持有的所有DDL锁,及所有对一个DDL锁的未定请求。 
DBA_DEPENDENCIES 列出对象之间的依赖性。在没有任何数据库链接时所创建的视图上的依赖性也是可用的。 
DBA_DIM_ATTRIBUTES 代表维级和功能依赖的列之间的关系。维级列所在的表,必须与所依赖列所在的表相匹配。 
DBA_DIM_CHILD_OF 代表在维中的一对维级之间的1:n的层次关系。 
DBA_DIM_HIERARCHIES 代表一个维层次。 
DBA_DIM_JOIN_KEY 代表两个维表之间的连接。这种连接通常在一个双亲维级列和一个子列之间指定。 
DBA_DIM_LEVEL_KEY 代表一个维级的列。一个级中列的位置通过KEY_POSITION来指定。 
DBA_DIM_LEVELS 代表一个维级。一个维级的所有列,必须来自于同一关系。 
DBA_DIMENSIONS 代表维对象。 
DBA_DIRECTORIES 提供数据库中所有目录对象的信息。 
DBA_DML_LOCKS 列出数据库中持有的所有DML锁,和对一个DML锁的所有未决请求。 
DBA_ERRORS 列出数据库中所有存储的对象的当前错误。 
DBA_EXP_FILES 包含导出文件的描述。 
DBA_EXP_OBJECTS 列出以增量方式导出的对象。 
DBA_EXP_VERSION 包含最后导出会话的版本号。 
DBA_EXTENTS 列出数据库中组成所有段的区。 
DBA_FREE_SPACE 列出所有表空间中的空闲分区。 
DBA_FREE_SPACE_COALESCED 包含表空间中合并空间的统计数据。 
DBA_IND_COLUMNS 包含在所有表和簇中组成索引的列的描述。 
DBA_IND_EXPRESSIONS 列出在所有表和簇中函数型索引的表达示。 
DBA_IND_PARTITIONS 为每一个索引分区,描述分区级的分区信息、分区的存储参数和由ANALYZE决定的各种分区统计数据。 
DBA_IND_SUBPARTITIONS 为当前用户拥有的每一个索引子分区,描述分区级的分区信息、子分区的存储参数和由ANALYZE决定的各种分区统计数据。 
DBA_INDEXES 包含数据库中所有索引的描述。 
DBA_INDEXTYPE_OPERATORS 列出由索引类型支持的所有操作符。 
DBA_INDEXTYPES 列出所有的索引类型。 
DBA_JOBS 列出数据库中的所有作业。 
DBA_JOBS_RUNNING 列出数据库中当前运行的所有作业。 
DBA_LIBRARIES 列出数据库中所有的库。 
DBA_LOB_PARTITIONS 显示包含在表中的用户可访问的LOB。 
DBA_LOB_SUBPARTITIONS 显示LOB数据子分区中的分区级属性。 
DBA_LOBS 显示包含在所有表中的LOB. 
DBA_LOCK_INTERNAL 包含每个被持有的锁或简易锁的一行信息,及锁或简易锁的每一个未决定请求的一行信息。 
DBA_LOCKS 列出数据库中持有的所有锁或简易锁,及一个锁或简易锁的所有未决请求。 
DBA_METHOD_PARAMS 包含数据库中类型的方法参数的描述。 
DBA_METHOD_RESULTS 包含数据库中所有类型的方法结果的描述。 
DBA_MVIEW_AGGREGATES 代表在聚集实例化视图的SELECT列表中出现的分组函数(聚集方法)。 
DBA_MVIEW_ANALYSIS 代表潜在地支持查询重写,并有可用于应用程序分析的附加信息的实例化视图。这种视图包括任何引用远程表或者包括如SYSDATE或USER等非静态值的实例化视图。 
DBA_MVIEW_DETAIL_RELATIONS 代表命名细节关系,这些关系或者在一个实例化视图的FROM列表中,或者直接通过FORM列表中的视图引用。在这个表中,没有表示实例化视图中的内嵌视图。 
DBA_MVIEW_JOINS 在一个实例化视图的WHERE子句中,代表两个列之间的连接。 
DBA_MVIEW_KEYS 代表命名细节关系,这些关系或者在一个实例化视图的FROM列表中,或者直接通过FORM列表中的视图引用。在这个表中,没有表示实例化视图中的内嵌视图。 
DBA_NESTED_TABLES 显示包含在所有表中的嵌套表的描述。 
DBA_OBJ_AUDIT_OPTS 列出一个用户所拥有的所有对象的审计选项。 
DBA_OBJECT_SIZE 列出各类PL/SQL对象的、用字节数表示大小。 
DBA_OBJECT_TABLES 显示数据库中所有对象表的描述。 
DBA_OBJECTS 列出数据库中所有的对象。 
DBA_OPANCILLARY 列出操作符连接的附加信息。 
DBA_OPARGUMENTS 列出操作符连接的参数信息。 
DBA_OPBINDINGS 列出操作符连接。 
DBA_OPERATORS 列出操作符。 
DBA_OUTLINE_HINTS 列出组成概要的提示集。 
DBA_OUTLINES 列出有关概要的信息。 
DBA_PART_COL_STATISTICS 包含所有表分区的列统计数据和直方图信息。 
DBA_PART_HISTOGRAMS 包含所有表分区上直方图的直方图数据(每个直方图的端点)。 
DBA_PART_INDEXES 列出所有分区索引的对象级分区信息。 
DBA_PART_KEY_COLUMNS 描述所有分区对象的分区关键字列。 
DBA_PART_LOBS 描述分区LOB的表级信息,包括LOB数据分区的缺省属性。 
DBA_PART_TABLES 列出所有分区表的对象级分区信息。 
DBA_PARTIAL_DROP_TABS 描述部分删除的表。 
DBA_PENDING_TRANSACTIONS 提供关于未完成事务(由于故障或协调器没有提交或回滚)的信息。 
DBA_POLICIES 列出策略。 
DBA_PRIV_AUDIT_OPTS 描述通过系统和由用户审计的当前系统权限。 
DBA_PROFILES 显示所有启动文件及其限制 
DBA_QUEUE_SCHEDULES 描述当前传播信息的方案。 
DBA_QUEUE_TABLES 描述在数据库中建立的所有队列表中的队列的名称和类型。 
DBA_QUEUE 描述数据库中每一个队列的操作特征。 
DBA_RCHILD 列出任何刷新组中的所有子组。 
DBA_REFRESH 列出所有刷新组。 
DBA_REFRESH_CHILDREN 列出刷新组中所有对象。 
DBA_REFS 描述数据库中所有表的对象类型列中的REF列和REF属性。 
DBA_REGISTERED_SNAPSHOT_GROUPS 列出该场地的所有快照登记组。 
DBA_REGISTERED_SNAPSHOT 检索本地表的远程快照的信息。 
DBA_REPCAT_REFRESH_TEMPLATES 与Advanced Replication(高级复制)一起使用。 
DBA_REPCAT_TEMPLATES_PARMS 与Advanced Replication(高级复制)一起使用。 
DBA_REPCAT_TEMPLATES_SITES 与Advanced Replication(高级复制)一起使用。 
DBA_REPCAT_USER_AUTHORIZATIONS 与Advanced Replication(高级复制)一起使用。 
DBA_REPCAT_USER_PARM_VALUES 与Advanced Replication(高级复制)一起使用。 
DBA_REPCATLOG 与Advanced Replication(高级复制)一起使用。 
DBA_REPCOLUMN 与Advanced Replication(高级复制)一起使用。 
DBA_REPCOLUMN_GROUP 与Advanced Replication(高级复制)一起使用。 
DBA_REPCONFLICT 与Advanced Replication(高级复制)一起使用。 
DBA_REPDDL 与Advanced Replication(高级复制)一起使用。 
DBA_REPGENERATED 与Advanced Replication(高级复制)一起使用。 
DBA_REPGENOBJECTS 与Advanced Replication(高级复制)一起使用。 
DBA_REPGROUP 与Advanced Replication(高级复制)一起使用。 
DBA_REPGROUPED_COLUMN 与Advanced Replication(高级复制)一起使用。 
DBA_REPKEY_COLUMNS 与Advanced Replication(高级复制)一起使用。 
DBA_REPOBJECT 与Advanced Replication(高级复制)一起使用。 
DBA_REPPARAMETER_COLUMN 与Advanced Replication(高级复制)一起使用。 
DBA_REPPRIORITY 与Advanced Replication(高级复制)一起使用。 
DBA_REPPRIORITY_GROUP 与Advanced Replication(高级复制)一起使用。 
DBA_REPPROP 与Advanced Replication(高级复制)一起使用。 
DBA_REPPESOL_STATS_CONTROL 与Advanced Replication(高级复制)一起使用。 
DBA_REPRESOLUTION 与Advanced Replication(高级复制)一起使用。 
DBA_REPRESOLUTION_METHOD 与Advanced Replication(高级复制)一起使用。 
DBA_REPSITES 与Advanced Replication(高级复制)一起使用。 
DBA_RGROUP 列出所有刷新组。 
DBA_ROLE_PRIIVS 列出授予用户和角色的角色 
DBA_ROLES 列出数据库中存在的所有角色 
DBA_ROLLBACK_SEGS 包含回滚段的描述 
DBA_RSRC_CONSUMER_GROUP_PRIVS 列出所有已授权的资源消费组、用户和角色。 
DBA_RSRC_CONSUMER_GROUPS 列出数据库中存在的所有资源消费组。 
DBA_RSRC_MANAGER_SYSTEM_PRIVS 列出所有已授予属于资源管理员系统权限的用户 
和角色。 
DBA_RSRC_PLAN_DIRECTIVES 列出数据库中存在的所有资源计划的指示。 
DBA_RSRC_PLANS 列出数据库中存在的所有资源计划。 
DBA_RULESETS 列出规则集信息。 
DBA_SEGMENTS 包含分配级所有数据库段的存储信息。 
DBA_SEOUENCES 包含数据库中所有序列的描述。 
DBA_SNAPSHOT_LOG_FILTER_COLS 列出记录在快照日志上的所有过滤列(不包括PK列) 
DBA_SNAPSHOT_LOGS 列出数据库中所有的快照日志。 
DBA_SNAPSHOT_REFRESH_TIMES 列出快照刷新次数。 
DBA_SNAPSHOTS 列出数据库中所有的快照。 
DBA_SOURCE 包含数据库中所有存储对象的来源。 
DBA_STMT_AUDIT_OPTS 包含的信息为:描述通过系统并由用户审计的当前 
系统审计选项。 
DBA_SUBPART_COL_STATISTICS 列出表子分区的列统计数据和直方图信息。 
DBA_SUBPART_HISTOGRAMS 列出表子分区中直方图的实际数据(每个直方图的端点)。 
DBA_SUBPART_KEY_COLUMNS 列出用Composite Range(复合排列)或HASH方法进行分区 
的表(和表上的本地索引)的子分区关键字列。 
DBA_SYNONYMS 列出数据库中所有同义词 
DBA_SYS_PRIVS 列出授予用户和角色的系统权限。 
DBA_TAB_COL_STATISTICS 包含在DBA_TAB_COLUMNS视图中的列统计数据和直方图信息。 
DBA_ TAB_COLUMNS 包含所有表、视图和簇的描述列的信息。 
DBA_TAB_COMMENTS 包含对数据库中所有表和视图的注解。 
DBA_TAB_HISTOGRAMS 列出所有表中列的直方图。 
DBA_TAB_PARTITIONS 对每一个表分区,描述它的分区级分区信息、分区的存储参数,和由 
ANALYZE 决定的各种分区统计数据。 
DBA_TAB_PRIVS 列出数据库中所有授予对象的授权。 
DBA_TAB_SUBPARTITIONS 对每一个表的子分区,描述它的名称、表的名称和它所属的分区, 
以及它的存储属性。 
DBA_TABLES 包含数据库中所有关系表的描述。 
DBA_TABLESPACES 包含所有表空间的描述 
DBA_TEMP_FILES 包含数据库临时文件的信息。 
DBA_TRIGGER_COLS 列出所有触发器中列的用法。 
DBA_TRIGGERS 列出数据库中所有触发器。 
DBA_TS_QUOTAS 列出所有用户的表空间限额。 
DBA_TYPE_ATTRS 显示数据库中类型的属性。 
DBA_TYPE_METHODS 描述数据库中所有类型的方法。 
DBA_TYPES 显示数据库中所有的抽象数据类型。 
DBA_UNUSED_COL_TABS 包含对所有具有未使用列的表的描述。 
DBA_UPDATABLE_COLUMNS 包含对可在一个连接视图中,由数据库管理员更新的列的描述。 
DBA_USERS 列出数据库中所有用户的信息。 
DBA_USTATS 包含当前用户的信息。 
DBA_VARRAYS 列出用户可以访问的视图的文本。 
DBA_VIEWS 包含数据库中所有视图的文本。 
DBA_WAITERS 列出所有正在等待一个锁的会话,以及列出正在阻止它们获得该锁的会话。 


-----------$ 

V$ACCESS 显示当前被锁定的数据库中的对象及正在访问它们的会话。 
V$ACTIVE_INSTANCES 为当前安装的数据库中出现的所有实例建立从实例名到实例号码的 
映射 
V$AQ 描述当前数据库中队列的统计量。 
V$ARCHIVE 包含归档所需的重做日志文件中的信息。每一行提供了一个线程所需的信息。这些信息在V$LOG中也是可用的。Oracle建议你使用V$LOG. 
V$ARCHIVE_DEST 描述当前实例的所有归档日志目的文件及它们的当前值、模式和状态。 
V$ARCHIVED_LOG 显示控制文件中的归档日志信息,包括归档日志名。在联重做日志文件成功地归档或清除(如果日志被清除,名字列将为NULL)后,一条归档日志记录被插入。如果这个日志被归档两次,那么就将有两条具有相同THREAD#,SEQUENCE#,FIRST_CHANG#值的归档日志记录,但它们的名字不同。当一个归档日志从一个备份集或一个副本中被恢复时,一个归档日志记录也将被插入。 
V$ARCHIVE_PROCESSES 为一个实例提供关于不同ARCH进程状态的信息。 
V$BACKUP 显示所有联机数据文件的备份状态。 
V$BACKUP_ASYNC_IO 从控制文件中显示备份集的信息。在这个备份集成功完成后,一个 
备份集记录将被插入。 
V$BACKUP_CORRUPTION 从控制文件中显示数据文件备份中有关损坏的信息。注意在控 
制文件和归档日志备份文件中损坏是不能容忍的 
V$BACKUP_DATAFILE 从控制文件中显示备份数据文件和备份控制文件的信息。 
V$BACKUP_DEVICE 显示关于支持备份设备的信息。如果一个设备类型不支持指名的设备,那么将为这个设备类型返回一个带有设备类型和NULL设备名的行。如果一个设备类型支持指名的设备,那么将为每一个这种类型的可用设备返回一行。特殊的设备类型DISK不会通过这个视图返回,因为它总是可用的 。 
V$BACKUP_PIECE 从控制文件中显示备份块的信息。每一个备份集由一个更多个备份块组 
成。 
V$BACKUP_REDOLOG 从控制文件中显示关于备份集中归档日志的信息。注意联机的重做日 
志文件不能够被直接备份。它们必须首先被存储到磁盘上然后再进行 
备份。一个归档日志备份集能包含一个或多个归档日志。 
V$BACKUP_SET 从控制文件中显示备份集的信息。在备份集成功完成后,一个备份集记录将被插入。 
V$BACKUP_SYNC_IO 从控制文件中显示备份集的信息。在备份集成功完成后,一个备份 
集记录将被插入。 
V$BGPROCESS 描述后台进程。 
V$BH 这是一个并行服务器视图。这个视图为系统全局区中的每一个缓冲区给出了状态和探查次数。 
V$BUFFER_POOL 显示关于这个实例所有可用缓冲池的信息。这个“集合数”属于LRU简易锁集的数目。 
V$BUFFER_POOL_STATISTICS 显示关于这个实例所有可用缓冲池的信息。这个“集合数” 
属于LRU简易锁集的数目。 
V$CACHE 这是一个并行服务器视图。这个视图包含当前实例的SGA中的每一个块的头部信息,这个实例是与一个特殊数据库对象相关联的。 
V$CACHE_LOCK 这是一个并行服务器的视图。除了特殊平台锁管理器标识符不同外, 
V$CACHE_LOCK 与V$CACHE非常相似。如果这个特殊平台锁管理器为监视当前正发生的PCM锁操作提供了工具,那么这些信息可能是有用的。 
V$CIRCUIT 包含关于虚电路的信息,这个虚电路是用户通过调度程序和服务器到数据库的所有连接。 
V$CLASS_PING 显示每一个块类中被探查块的数目。用这个视图可以比较不同类的块竞争。 
V$COMPATIBILITY 显示数据库实例使用中的特征,可能阻止系统性能下降到先前的版本。这是这些信息的动态(SGA)版本,它不可能反映出所用过的另外一些实例的特征,并可能包含暂时的不兼容性(如UNDO段),不过这将在数据库完全的关闭掉后不复存在。 
V$COMPATSEG 列出数据库使用中的永久性的特征,这些特征将会阻止数据库回到早期的版本中去。 
V$CONTEXT 列出当前对话的设置属性。 
V$CONTROLFILE 列出控制文件的名字。 
V$CONTROLFILE_RECORD_SECTION 显示关于控制文件记录部分的信息。 
V$COPY_CORRUPTION 显示关于控制文件中数据文件副本损坏的信息。 
V$DATABASE 包含控制文件中数据库信息。 
V$DATAFILE 包含控制文件中数据库文件的信息。 
V$DATAFILE_COPY 显示控制文件中数据文件副本的信息。 
V$DATAFILE_HEADER 显示数据文件头部的数据文件信息。 
V$DBFILE 列出组成数据库中的所有数据文件。这个视图是为历史兼容性保留的,我们建议用V$DATAFILE来代替。 
V$DBLINK 描述由发布对V$DBLINK查询的会话所打开的所有数据库链接(用 
IN_TRANSACTION=YES链接)。这些数据库链接必须在关闭前被提交或滚回。 
V$DB_OBJECT_CACHE 显示缓存在库高速缓存中的数据库对象。这些对象包括表、索引、簇、 
同义词定义、PL/SQL过程和包及触发器。 
V$DB_PIPES 显示当前数据库中的管道。 
V$DELETED_OBJECT 显示控制文件中被删除归档日志、数据文件副本和备份块的信息。这 
个视图的唯一目的是优化恢复目录的再同步操作。当一个归档日志、数据文件副本或备份块被删除时,相应的记录将被做上删除标志。 
V$DISPATCHER 提供调度进程的信息。 
V$ DISPATCHER_RATE 为调度进程提供速率统计量。 
V$DLM_ALL_LOCKS 这是一个并行服务器视图。V$DLM_ALL_LOCKS列出当前所有锁的信息,这些是锁管理器已知的被阻塞或阻塞其他对象的锁信息。 
V$DLM_CONVERT_LOCAL 显示本地锁转换操作所消耗的时间。 
V$DLM_CONVERT_REMOTE 显示远程锁转换操作所消耗的时间。 
V$DLM_LOCKS 这是一个并行服务器视图。V$DLM_ALL_LOCKS 列出当前所有锁的信息,这些是锁管理器已知的被阻塞或阻塞其他对象的锁信息。 
V$DLM_MISC 显示多种DLM统计量。 
V$DLM_RESS 这是一个并行服务器的视图,它显示了当前锁管理器已知的全部资源的信息。 
V$ENABLEDPRIVS 显示被授予的权限。这些权限可以在SYS.SYSTEM_PRIVILEGES_MAP这个表中找到。 
V$ENQUEUE_LOCK 显示排队状态对象所拥有的全部锁。这个视图中的列等同于V$LOCK 
中的列。更多的信息参见V$LOCK. 
V$EVENT_NAME 包含等待事件的信息。 
V$EXECUTION 显示并行执行中的信息。 
V$FALSE_PING 这是一个并行服务器视图。这个视图显示可能得到探查失败的缓冲区,探查被同样锁保护的缓冲区10次以上,如像另一个探查10次以上的缓冲区。被鉴别为获得探查失败信息的缓冲区能够被重新映射到GC_FILES_TO_LOCKS 中以减少锁的冲突。 
V$FAST_START_SERVERS 提供关于执行并行事务恢复的所有从属恢复操作的信息。 
V$FAST_START_TRANSACTIONS 包含关于Oracle 恢复中的事务进展信息。 
V$FILE_PING 显示每一个数据文件被探查的块数目。反过来,这些信息能被用来决定对一个存在的数据文件访问方式,同时也可以决定从数据文件块到PCM锁的新的映射。 
V$FILESTAT 包含文件关于读/写统计量的信息 
V$FIXED_TABLE 显示数据库中所有动态性能表、视图和导出表。一些V$表(如 
V$ROLLNAME)涉及到了真正的表,没有被列出来。 
V$FIXED_VIEW_DEFINITION 包含所有固定视图的定义(以V$开头的视图)。应谨慎地使 
用这个表。Oracle 总是想从版本到版本保持固定视图的行为,但是固定视图的定义能够在没有通知的情况下改变。用这些定义通过使用动态性能表中的索引列可以优化你的查询。 
V$GLOBAL_BLOCKED_LOCKS 显示全局块锁。 
V$GLOBAL_TRANSACTION 显示当前激活的全局事务的信息。 
V$HS_AGENT 标识当前运行在一个给定的主机上的HS代理的集合,每一个代理进程用一行表示。 
V$HS_SESSION 标识当前为一个Oracle 服务器打开的HS会话集。 
V$INDEXED_FIXED_COLUMN 显示建立索引的动态性能表中的列(X$表),X$表能够在没 
有通知的情况下改变。使用这个视图仅仅在写查询方面比固定视图(V$视图)的效率要高。 
V$INSTANCE 显示当前实例的状态。这个V$INSTANCE 版本同早期的V$INSTANCE 版本不兼容。 
V$INSTANCE_RECOVERY 用来监视执行用户指定恢复读次数的限制机制。 
V$LATCH 为非双亲简易锁列出统计表,同时为双亲简易锁列出总计统计。就是说,每一个双亲简易锁的统计量包括它的每一个子简易锁的计算值。 
V$LATCHHOLDER 包含当前简易锁持有者的信息。 
V$LATCHNAME 包含关于显示在V$LATCH中的简易锁的解码简易锁名字的信息。 
V$LATCHNAME 中的行与V$LATCH中的行有一一对应的关系。 
V$LATCH_CHILDREN 包含关于子简易锁的统计量。这个视图包括V$LATCH中的所有列和 
一个CHILD#列。注意如果子简易锁LATCH#列相匹配,那么它们将具有相同的双亲。 
V$LATCH_MISSES 包含试图获得一个简易锁失败的统计量。 
V$LATCH_PARENT 包含关于双亲简易锁的统计量。V$LATCH_PARENT中的列与V$LATCH中的列是相等的。 
V$LIBRARYCACHE 包含关于高速缓存性能和活动的统计量。 
V$LICENSE 包含关于许可证限制的信息。 
V$LOADCSTAT 包含在一个直接装载执行过程中所编译的SQL*Loader统计量。这些统计量适用于整个的加载。既然装载数据和查询不能在同一时间进行,那么,任何对这个表的SELECT操作都将会导致”no rows retured”(没有行返回) 
V$LOADTSTAT 包含在一个直接装载执行过程中所编译的SQL*Loader统计量。这些统计量适用于当前的表。既然装载数据和查询不能在同一时间进行,那么,任何对这个表的SELECT操作都将会导致”no rows retured”(没有行返回) 
V$LOCK 列出当前ORACLE服务器所持有的锁和对一个锁或简易锁的未决请求。 
V$LOCK_ACTIVITY 这是一个并行服务器视图。它显示当前实例的DLM锁操作活动,每 
一行对应着锁操作的类型。 
V$LOCK_ELEMENT 这是一个并行服务器视图。每一个被缓冲高速缓存使用的PCM锁在 
V$LOCK_ELEMENT中都有一个条目。与一个锁元素相对应的PCM锁的名字是(‘BL’,indx,class)。 
V$LOCKED_OBJECT 列出在这个系统中每一个事务所获得的全部锁。 
V$LOCKS_WITH_COLLISIONS 这是一个并行服务器视图。用这个视图可以查找保护多重锁 
缓冲区的锁,这些缓冲区的每一个至少被强制性的读或写达十次以上。那些正经历着探查失败的缓冲区,主要是由于被映射到同样的锁上。 
V$LOG 包含控制文件中的日志文件信息。 
V$LOGFILE 包含重做日志文件的信息。 
V$LOGHIST 包含控制文件中的日志历史信息。这个视图是为历史兼容性保留的。这里建议使用V$LOG_HISTORY来代替它。 
V$LOGMNR_CONTENTS 包含日志历史信息。 
V$LOGMNR_DICTIONARY 包含日志历史信息。 
V$LOGMNR_LOGS 包含日志信息。 
V$LOGMNR_PARAMETERS 包含日志信息。 
V$LOG_HISTORY 包含控制文件中的日志历史信息。 
V$MLS_PARAMETERS 这是一个ORACLE委托服务器(Trusted Oracle Server)视图,这个视图列出ORACLE指定委托服务器的初始化参数。更多的信息,可以在你的ORACLE委托文件中查到。 
V$MTS 包含调节多线程的服务器的信息。 
V$MYSTAT 包含当前会话的统计量。 
V$NLS_PARAMETERS 包含当前NLS参数的值。 
V$NLS_VALID_VALUES 列出NLS参数所有有效的信息。 
V$OBJECT_DEPENDENCY 能够通过当前装戴在共享池中的包、过程或游标来决定依赖于那 
一个对象。例如,与V$SESSIONV和$SQL一起,它能被用来决定在SQL语句中使用哪一个正在被用户执行的表。要知道更多的信息,请见V$SESSION和V$SQL 
V$OBSOLETE_PARAMETER 列出陈旧的参数。只要有某一值为TRUE,你就应该检查为什 
么。 
V$OFFLINE_CURSOR 显示控制文件中数据文件的脱机信息。 
V$OPEN_CURSOR 列出每一个用户会话当前打开的和解析的游标。 
V$OPTION 列出用ORACLE服务器安装的选项。 
V$PARALLEL_DEGREE_LIMIT_MTH 显示所有有效的并行度限制资源分配的方法。 
V$PARAMETER 列出关于初始化参数的信息。 
V$PING 这是一个并行服务器视图。除了只显示至少被探查一次的块有所不同外,V$PING视图与V$CACHE视图完全是一样的,这个视图包含当前实例的SGA中每一块的块首部信息,这个实例是与一个特定的数据库对象相关联的。 
V$PQ_SESSTAT 列出并行查询会话的统计信息。注意:这个视图在未来的版本中将会成为过的 。 
V$PQ_SLAVE 列出一个实例上每个活动并行执行服务器的统计量。注意:这个视图在未来的版本中将会过时而被一个新的称做V$PX_PROCESS的视图所代替。 
V$PQ_SYSSTAT 列出并行查询的系统统计量。注意:这个视图在未来的版本中将会过时而被一个新的称做V$PX_PROCESS_SYSSTAT的视图所代替。 
V$PQ_TQSTAT 包含并行执行操作上的统计量。这些统计量是在完成了查询后编辑的,并且仅在会话期保持。它显示在执行树的每一级阶段,通过每一个并行运行服务器处理的行数。这个视图能够帮助在一个查询执行中测定不平衡的问题。注意:这个视图在未来的版本中将称做V$PX_TQSTAT视图。 
V$PROCESS 包含关于当前活动进程的信息。当LATCHWAIT列显示一个进程正等待什么样的简易锁时,LATCHSPIN列就显示一个进程正围绕什么样简易锁运行。在多处理器机器上,ORACLE进程在等待一个简易锁之前是围绕它运行的。 
V$PROXY_ARCHIVEDLOG 包含归档日志备份文件的描述信息,这些备份文件带有一个称 
为Proxy副本的新特征。每一个行代表一个归档日志的备份信息。 
V$PROXY_DATAFILE 包含数据文件和控制文件备份的描述信息,这个备份文件带了一个称 
为Proxy副本的新特征。每一行代表一个数据库文件的备份信息。 
V$PWFILE_USERS 列出被授予SYSDBA和SYSOPER权限的用户,这些权限就象从 
password文件中衍生而来一样。 
V$PX_PROCESS 包含正运行并行操作的会话的信息。 
V$PX_PROCESS_SYSSTAT 包含正运行并行操作的会话的信息。 
V$PX_SESSION 包含正运行并行操作的会话的信息。

Oracle日志查询

在Oracle数据库中,日志记录是管理和监控的重要部分。以下是一些常用的日志查询方法,以帮助您查看和分析Oracle日志。

1.查看警告日志

Oracle的警告日志通常位于$ORACLE_BASE/diag/rdbms/{dbname}/{dbname}/trace/alert_{dbname}.log。您可以使用以下命令查看该日志:

-- 在命令行中查看
tail -f $ORACLE_BASE/diag/rdbms/{dbname}/{dbname}/trace/alert_{dbname}.log

2.查询Redo日志和归档日志

查询Redo日志

Redo日志用于记录对数据库所做的所有更改。您可以使用如下SQL查询了解Redo日志的状态:

SELECT * FROM v$log;
SELECT * FROM v$logfile;

查询归档日志

如果启用了归档模式,可以使用以下查询查看归档日志的信息:

SELECT * FROM v$archived_log;

3.查看审计日志

如果启用了数据库审计,可以使用以下查询查看审计信息:

SELECT * FROM dba_audit_trail;

4.查询动态性能视图

Oracle提供了一些动态性能视图,可以用来监控数据库的各种活动。例如,您可以查询以下视图以获取当前活动会话的信息:

SELECT * FROM v$session;

5.查询错误日志

如果需要查看最近的错误,可以通过以下查询获取最近的错误信息:

SELECT * FROM v$alert_log WHERE timestamp > SYSDATE - 1;  -- 最近一天的错误

6.使用DBMS_UTILITY包

有时您可以通过DBMS_UTILITY包来检索更详细的日志信息:

EXEC DBMS_UTILITY.COMMIT;

7.查看最近的SQL执行

要查看执行过的SQL语句,可以查询v$sql视图:

SELECT sql_text, executions, last_active_time
FROM v$sql
ORDER BY last_active_time DESC;
#查询SQL区域信息
SELECT * FROM v$sqlarea;

8.查询特定日期的SQL语句

您希望查询在2021-11-17加载的SQL语句。您之前的查询语法上有一些问题。以下是经过修改的查询:

SELECT * 
FROM v$sql 
WHERE first_load_time LIKE '2021-11-17%'
AND last_active_time > TO_DATE('2021/11/27 00:00:00', 'yyyy-mm-dd hh24:mi:ss')
AND last_active_time < TO_DATE('2021/11/28 00:00:00', 'yyyy-mm-dd hh24:mi:ss')  -- 修改了结束时间
AND sql_text LIKE '%update%' 
AND sql_text LIKE '%ka%'
ORDER BY last_active_time DESC;

9.注意事项

  • 确保您具有相应的权限来访问这些视图。
  • 根据具体的需求和环境,调整查询条件以获取所需的信息。

通过以上查询方法,您可以有效地监控和管理Oracle数据库的日志信息。

oracle前100的sql查询次数

获取Oracle数据库中执行次数前100的SQL语句

SELECT *
FROM (
    SELECT 
        s.SQL_TEXT,
        s.EXECUTIONS AS "执行次数",
        u.USERNAME AS "用户名",  -- 使用USERNAME而不是PARSING_USER_ID
        RANK() OVER (ORDER BY s.EXECUTIONS DESC) AS EXEC_RANK
    FROM 
        v$sql s
    LEFT JOIN 
        all_users u ON u.USER_ID = s.PARSING_USER_ID
) t
WHERE EXEC_RANK <= 100;

关键点说明:

  1. 使用USERNAME:由于PARSING_USER_ID是用户ID,通常我们更希望看到的是用户名,因此在查询中用u.USERNAME替换了PARSING_USER_ID.
  2. 别名使用:使用AS为列提供易读的别名。
  3. 性能考虑:这个查询会返回所有列的信息,但如果只关注特定信息,可以选择性地列出所需字段,以提升性能。
  4. RANK函数RANK()函数会对相同的执行次数给予相同的排名。如果您希望不允许重复排名而是连续排名,可以考虑使用ROW_NUMBER()

执行方法:

  • 将上述SQL查询复制到Navicat的查询窗口中。
  • 点击“运行”按钮执行查询。
  • 查看结果以获取执行次数最多的前100条SQL语句。

通过这种方式,您可以轻松分析数据库中最常执行的SQL语句,帮助优化性能或监控使用情况。

Oracle的启动参数

racdb.__db_cache_size=2415919104
racdb.__inmemory_ext_roarea=0
racdb.__inmemory_ext_rwarea=0
racdb.__java_pool_size=939524096
racdb.__large_pool_size=671088640
racdb.__oracle_base='/oradata/u01/app/oracle'#ORACLE_BASE set from environment
racdb.__pga_aggregate_target=18790481920
racdb.__sga_target=35165044736
racdb.__shared_io_pool_size=134217728
racdb.__shared_pool_size=30870077440
racdb.__streams_pool_size=0
racdb.__unified_pga_pool_size=0
*.audit_file_dest='/oradata/u01/app/oracle/admin/racdb/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/oradata/u02/oradata/RACDB/control01.ctl','/oradata/u02/oradata/RACDB/control02.ctl'
*.db_block_size=8192
*.db_name='racdb'
*.log_archive_Dest_1='location=/oradata/u02/archivelog'
*.db_recovery_file_dest='/oradata/u02/data'
*.db_recovery_file_dest_size=53687091200
*.diagnostic_dest='/oradata/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racdbXDB)'
*.enable_pluggable_database=true
*.memory_target=51456m
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.processes=3200
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
##########################

1.acdb.__data_transfer_cache_size=0
数据传输缓存的大小,设置为0表示不使用此缓存。
2.racdb.__db_cache_size=2415919104
数据库缓存区的大小,大约2.25GB,用于存储数据块以提高查询性能。
3.racdb.__inmemory_ext_roarea=0
内存外部只读区域的大小,设置为0表示未启用该功能。
4.racdb.__inmemory_ext_rwarea=0
内存外部可写区域的大小,设置为0表示未启用该功能。
5.racdb.__java_pool_size=939524096
Java池的大小,设置为约900MB,专用于支持Java程序和应用程序。
6.racdb.__large_pool_size=671088640
大池的大小,设置为约640MB,通常用于大规模的操作,如备份和恢复。
7.racdb.__oracle_base='/oradata/u01/app/oracle'
Oracle基础目录,指定了Oracle安装的根路径。
8.racdb.__pga_aggregate_target=18790481920
总PGA目标大小,设置为约18GB,用于会话和进程的私有内存。
9.racdb.__sga_target=35165044736
SGA总目标大小,设置为约35GB,用于共享内存区域。
10.racdb.__shared_io_pool_size=134217728
共享I/O池的大小,设置为128MB,用于优化I/O操作。
11.racdb.__shared_pool_size=30870077440
共享池的大小,设置为约30GB,主要用于存储共享SQL和PL/SQL代码。
12.racdb.__streams_pool_size=0
流池的大小,设置为0表示未启用流功能。
13.racdb.__unified_pga_pool_size=0
统一PGA池的大小,设置为0表示未启用。
14.*.audit_file_dest='/oradata/u01/app/oracle/admin/racdb/adump'
审计文件存放位置,用于存储审计日志。
15.*.audit_trail='db'
审计跟踪类型,设置为'db'表示将审计信息写入数据库。
16.*.compatible='19.0.0'
数据库的兼容性版本,设置为19.0.0。
17.*.control_files='/oradata/u02/oradata/RACDB/control01.ctl','/oradata/u02/oradata/RACDB/control02.ctl'
控制文件的位置,这些文件对数据库的启动和恢复至关重要。
18.*.db_block_size=8192
数据块大小,设置为8192字节(8KB)。
19.*.db_name='racdb'
数据库的名称,设置为'racdb'。
20.*.log_archive_dest_1='location=/oradata/u02/archivelog'
日志归档位置,指定归档日志的存储路径。
21.*.db_recovery_file_dest='/oradata/u02/data'
恢复文件的存储位置,用于存放闪回、备份等文件。
22.*.db_recovery_file_dest_size=53687091200
恢复文件的最大大小,设置为50GB。
23.*.diagnostic_dest='/oradata/u01/app/oracle'
诊断信息的存放目录。
24.*.dispatchers='(PROTOCOL=TCP) (SERVICE=racdbXDB)'
分发器配置,指定了使用TCP协议的服务。
25.*.enable_pluggable_database=true
启用可插拔数据库功能。
26.*.memory_target=51456m
Oracle自动内存管理的总目标大小,设置为约51GB。
27.*.nls_language='AMERICAN'
设置NLS(国家语言支持)语言为美国英语。
28.*.nls_territory='AMERICA'
设置NLS地区为美国。
29.*.open_cursors=300
最大打开游标数,设置为300。
30.*.processes=3200
最大允许的并发进程数,设置为3200。
31.*.remote_login_passwordfile='EXCLUSIVE'
远程登录密码文件的设置,'EXCLUSIVE'表示仅限于一个数据库实例使用。
32.*.undo_tablespace='UNDOTBS1'
撤消表空间的名称,指定为'UNDOTBS1',用于事务的撤消。

如何查看和修改启动参数

查看参数

可以通过以下SQL查询来查看当前的初始化参数:

SHOW PARAMETER <parameter_name>;  -- 查看特定参数

或者查看所有参数:

SELECT * FROM v$parameter;

修改参数

要修改启动参数,可以使用以下命令:

  • 动态修改参数(在没有重启数据库的情况下):
ALTER SYSTEM SET <parameter_name> = <value> SCOPE=BOTH;  -- 或者 SCOPE=MEMORY
  • 静态修改参数(需要重启数据库):
ALTER SYSTEM SET <parameter_name> = <value> SCOPE=SPFILE;

然后,重启数据库以使更改生效。

注意事项

  • 修改参数时,请确保了解该参数的影响,尤其是在生产环境中。
  • 在进行任何修改之前,建议备份当前的参数设置。

通过合理配置启动参数,可以优化Oracle数据库的性能和稳定性。

Oracle数据库多表备份

在Oracle数据库中,进行多表备份可以通过几种方式实现。以下是一些常见的方法:

  1. 使用EXPDPIMPDP工具

Oracle的Data Pump工具允许你导出和导入数据库对象,比如表、用户等。

导出多个表示例:

expdp username/password DIRECTORY=your_directory DUMPFILE=backup.dmp LOGFILE=backup.log TABLES=table1,table2,table3
  1. 使用RMAN备份

如果你需要备份整个数据库或某些表空间,可以使用RMAN(Recovery Manager)。

备份命令示例:

RMAN> BACKUP DATABASE;
  1. 使用SQL*Plus生成表数据

可以使用SQL*Plus将多个表的数据导出到文件中。

示例:

SET MARKUP CSV ON DELIMITER ',' QUOTE ON
SPOOL backup_file.csv
SELECT * FROM table1;
SELECT * FROM table2;
SPOOL OFF;
  1. 使用CREATE TABLE AS SELECT

如果你只需备份数据而不需要保留索引和约束,可以使用CTAS语句:

CREATE TABLE backup_table1 AS SELECT * FROM original_table1;
CREATE TABLE backup_table2 AS SELECT * FROM original_table2;

注意事项

  • 确保有足够的存储空间用于备份。
  • 定期检查备份文件的完整性。
  • 针对大型表备份时,可能需要考虑性能影响。

选择合适的方法根据具体需求和数据库环境来定。

Oracle查询历史数据

在Oracle数据库中,您可以使用闪回查询来查看历史数据。您提供的查询语法几乎正确,但在使用AS OF TIMESTAMP时,确保您有相应的闪回日志和时间点。

示例查询

以下是您的查询格式化后的版本:

SELECT * 
FROM MES_BOM_TECH AS OF TIMESTAMP TO_TIMESTAMP('2024-05-06 09:00:00', 'YYYY-MM-DD HH24:MI:SS');

注意事项

  1. 闪回日志:确保数据库已启用闪回功能,并且闪回日志能够追溯到指定的时间点。
  2. 权限:执行闪回查询的用户需要具有相应的权限。
  3. 时间点:确保指定的时间点在表的历史记录范围内。

检查闪回日志

如果您不确定是否可以查询该时间点的数据,可以检查闪回日志的保留策略:

SELECT * FROM V$FLASHBACK_DATABASE_LOG;

其他选项

如果您想要更灵活或复杂的历史数据查询,可以考虑使用VERSIONS BETWEEN子句,例如:

SELECT VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_XID, *
FROM MES_BOM_TECH VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2024-05-06 08:00:00', 'YYYY-MM-DD HH24:MI:SS') AND 
                                  TO_TIMESTAMP('2024-05-06 09:00:00', 'YYYY-MM-DD HH24:MI:SS');

这将显示在指定时间段内的所有版本。

Oracle锁表管理和分析SQL堵塞

在Oracle数据库中,进行锁表管理和分析SQL堵塞可以通过多个视图来实现,尤其是gv$active_session_historygv$session。以下是您提供的SQL查询的详细解读,以及一些可能的优化建议。

  1. 分析SQL堵塞

查询活动会话历史

您提供的第一个查询用于监控特定时间范围内的活跃会话,并根据sql_id过滤:

sqlCopy CodeSELECT inst_id, sample_time, sql_id, session_id, session_serial#, 
       sql_exec_id, sql_exec_start, blocking_session, 
       blocking_session_serial#, blocking_inst_id, MACHINE, event
FROM gv$active_session_history
WHERE sample_time >= TO_DATE('2024/07-04 18:00:00', 'yyyy/mm/dd hh24:mi:ss')
  AND sample_time <= TO_DATE('2024/07-04 19:00:00', 'yyyy/mm/dd hh24:mi:ss')
  AND sql_id = '6fq83yf92txc7'
ORDER BY sample_time;
  • 建议:确保sql_id确实存在于指定时间段内的数据中。此外,可以考虑添加索引以加快查询速度,尤其在大数据量时。

查询阻塞会话

第二个查询用于识别由于某些特定事件(例如cursor: pin S wait on X)而导致的阻塞会话:

sqlCopy CodeSELECT inst_id, blocking_session, blocking_session_serial#, COUNT(*)
FROM gv$active_session_history
WHERE sample_time >= TO_DATE('2024/07-04 18:00:00', 'yyyy/mm/dd hh24:mi:ss')
  AND sample_time <= TO_DATE('2024/07-04 19:00:00', 'yyyy/mm/dd hh24:mi:ss')
  AND event = 'cursor: pin S wait on X'
GROUP BY inst_id, blocking_session, blocking_session_serial#
ORDER BY COUNT(*) DESC;
  • 建议:这个查询帮助您找出哪些会话频繁造成阻塞。您可以利用COUNT(*)来确定最常见的阻塞源。
  1. 实时查询当前活动会话

您的第三个查询用于实时监控当前活跃的会话:

sqlCopy CodeSELECT s.sid, s.serial#, s.username, s.osuser, s.machine, 
       s.program, s.sql_id, s.sql_address, s.sql_hash_value, 
       s.sql_child_number, s.status, s.wait_class, 
       s.event, s.seconds_in_wait, s.last_call_et, s.logon_time
FROM gv$session s
LEFT JOIN gv$sql q ON (s.sql_id = q.sql_id)
WHERE s.sql_address IS NOT NULL
  AND s.status = 'ACTIVE';
  • 建议:此查询有效地显示所有活跃会话的信息,您可以进一步过滤特定用户或程序,以便更好地诊断问题。

综合建议

  1. 监控和警报:设置监控和警报机制,以便在检测到锁争用或长时间等待的情况时及时通知。
  2. 执行计划分析:对于经常导致阻塞的SQL,使用EXPLAIN PLAN分析其执行计划,以查找潜在的性能瓶颈。
  3. SQL优化:对频繁出现的SQL进行优化,如调整索引、重写查询等,以减少锁争用。
  4. 资源管理:监控系统资源使用情况(如CPU、内存、I/O),并根据需要调整资源分配。

通过以上的查询和策略,您可以更有效地管理锁表问题,并提高Oracle数据库的性能。

Oracle查看执行进度

您的SQL查询用于监控Oracle数据库中的执行进度、查询正在执行的SQL以及分析争用对象。以下是对您提供的各个查询的详细解读和优化建议。

  1. 查看执行进度

这个查询显示了当前长时间运行的操作的执行进度:

SELECT sid "SID",
       ELAPSED_SECONDS "秒 已经执行",
       TIME_REMAINING "秒 预计完成时间",
       jindu "进度", SQL_TEXT
FROM (
    SELECT A.USERNAME,
           A.SID,
           A.SERIAL#,
           A.OPNAME,
           A.TARGET,
           A.START_TIME,
           A.last_update_time,
           C.OSUSER,
           C.MACHINE,
           C.PROGRAM,
           ROUND(A.SOFAR * 100 / TOTALWORK, 0) || '%' AS jindu,
           A.TIME_REMAINING,
           A.ELAPSED_SECONDS,
           B.SQL_TEXT
    FROM gv$session_longops A
    JOIN gv$sql B ON A.SQL_ADDRESS = B.ADDRESS AND A.SQL_HASH_VALUE = B.HASH_VALUE
    JOIN gv$session C ON A.SID = C.SID
    WHERE C.STATUS = 'ACTIVE'
)
WHERE jindu != '100%';
  • 建议
    • 确保在执行此查询时,gv$session_longops表中有记录。如果没有记录,可能是因为没有执行足够长的操作。
    • 可以考虑增加条件,例如过滤特定的用户名或机器,以便更精确地监控。
  1. 查看物理进程对应的SQL

该查询帮助您找出特定物理进程正在执行的SQL语句:

sqlCopy CodeSELECT s.sql_text
FROM gv$sql s
JOIN gv$session t ON s.sql_id = t.SQL_ID
JOIN gv$process v ON t.PADDR = v.ADDR
WHERE v.SPID = '73110';
  • 建议
    • 确保SPID的值是正确的并且存在于系统中。可以在更改SPID后确认其状态。
    • 如果使用的是多个实例的环境,确保加入实例ID的判断以避免混淆。
  1. 查争用对象

此查询用于查找在特定时间范围内因行锁争用而被阻塞的会话:

SELECT D.SESSION_ID,
       D.SESSION_SERIAL#,
       D.current_obj#,
       D.current_file#,
       D.current_block#,
       D.current_row,
       D.EVENT,
       D.P1TEXT,
       D.P1,
       D.P2TEXT,
       D.P2,
       CHR(BITAND(P1, -16777216) / 16777215) ||
       CHR(BITAND(P1, 16711680) / 65535) "Lock",
       BITAND(P1, 65535) "Mode",
       D.BLOCKING_SESSION,
       D.BLOCKING_SESSION_STATUS,
       D.BLOCKING_SESSION_SERIAL#,
       D.SQL_ID,
       TO_CHAR(D.SAMPLE_TIME, 'YYYYMMDDHH24MISS') SAMPLE_TIME
FROM DBA_HIST_ACTIVE_SESS_HISTORY D
WHERE D.SAMPLE_TIME BETWEEN TO_DATE('2024-02-25 20:45:00', 'yyyy-mm-dd hh24:mi:ss') AND
                         TO_DATE('2024-02-25 22:00:00', 'yyyy-mm-dd hh24:mi:ss')
  AND D.EVENT = 'enq: TX - row lock contention'
ORDER BY D.BLOCKING_SESSION;
  • 建议
    • 您可以根据业务需求调整时间范围,以获取更相关的数据。
    • 考虑增加ROWNUM限制或分页,以避免一次检索过多数据,导致查询变慢。
    • 结合DBA_HIST_SNAPSHOT表,查看对应的快照时间戳,可以更好地分析负载情况。

综合建议

  • 监控工具:考虑使用Oracle Enterprise Manager或其他可视化监控工具来实时监控数据库性能和会话状态。
  • 定期审计:定期检查长时间运行的进程,以便识别潜在的性能瓶颈并进行优化。
  • 锁争用优化:对频繁发生锁争用的SQL进行分析,并考虑重构查询或增加索引。

停止定时任务

  1. 查看当前定时任务

    SELECT * FROM user_jobs;
    
    • 这个查询用于列出当前用户下的所有定时任务。
  2. 查看数据库中的所有调度器任务

    SELECT owner, job_name, job_action, job_type FROM dba_scheduler_jobs;
    
    • 这个查询返回所有用户的调度器任务,可以用来获取任务的详细信息。
  3. 禁用特定的调度任务

    BEGIN  
        DBMS_SCHEDULER.DISABLE('<owner>.<job_name>'); 
    END;
    
    • 替换<owner><job_name>为具体的拥有者和任务名称,以禁用相应的调度任务。

启动定时任务

  1. 创建新的调度任务

    BEGIN  
        DBMS_SCHEDULER.CREATE_JOB (
            job_name        => 'my_job',
            job_type        => 'PLSQL_BLOCK',
            job_action      => 'BEGIN my_procedure; END;',
            start_date      => SYSTIMESTAMP,
            repeat_interval => 'FREQ=DAILY; BYHOUR=8;',
            end_date        => NULL,
            enabled         => TRUE,
            comments        => 'My scheduled job'  
        ); 
    END;
    
    • 这里定义了一个名为my_job的调度任务,每天早上8点执行my_procedure过程。
    • 注意,确保my_procedure存在且具有正确的权限。
  2. 启用已存在的调度任务

    BEGIN  
        DBMS_SCHEDULER.ENABLE('my_job'); 
    END;
    
    • 此代码将启用名为my_job的任务。

查询锁信息

set linesize 400
set pagesize 400
col object_name for a40
select a.inst_id, a.sid, a.type, a.id1, a.id2, b.owner, b.object_name, a.lmode, a.request
from gv$lock a, dba_objects b
where a.id1 = b.object_id(+) and a.type in ('TM', 'TX')
order by a.inst_id, a.sid;
  • 目的: 显示当前持有的锁(包括事务锁和表锁)的详细信息。

  • 字段

    :

    • inst_id: 实例ID
    • sid: 会话ID
    • type: 锁类型(TM或TX)
    • id1, id2: 锁的标识符
    • owner: 对象拥有者
    • object_name: 对象名称
    • lmode: 锁模式
    • request: 请求的锁模式

查询 TX 锁

select SID, TYPE, ID1, ID2, LMODE, REQUEST, CTIME, BLOCK from V$lock where block = 1 or request <> 0;
  • 目的: 查找正在被阻塞的会话或请求锁的会话。

  • 字段

    :

    • SID: 会话ID
    • TYPE: 锁类型
    • ID1, ID2: 锁的标识符
    • LMODE: 当前持有的锁模式
    • REQUEST: 请求的锁模式
    • CTIME: 锁存在的时间
    • BLOCK: 是否被阻塞

查堵塞 SQL 的 SQL_ID

select *
from (select a.sid, a.serial#,
             a.sql_id,
             a.event,
             a.status,
             connect_by_isleaf as isleaf,
             sys_connect_by_path(SID, '<-') tree,
             level as tree_level
        from v$session a
       start with a.blocking_session is not null
      connect by nocycle a.sid = prior a.blocking_session)
where isleaf = 1;
  • 目的: 找出堵塞链的末端会话,即最终被阻塞的会话。
  • 结构: 使用递归查询来构建堵塞的树状结构。

根据 SQL_ID 查 SQL

select SQL_TEXT, SQL_FULLTEXT, SQL_ID, LOADS, FIRST_LOAD_TIME, PLSQL_EXEC_TIME,
       JAVA_EXEC_TIME, ROWS_PROCESSED, COMMAND_TYPE, PARSING_USER_ID,
       PARSING_SCHEMA_ID, PARSING_SCHEMA_NAME, KEPT_VERSIONS, ADDRESS,
       SERVICE, MODULE, MODULE_HASH, ACTION, CPU_TIME, ELAPSED_TIME,
       OUTLINE_SID, CHILD_ADDRESS, SQLTYPE, REMOTE, OBJECT_STATUS,
       LITERAL_HASH_VALUE, LAST_LOAD_TIME, PROGRAM_ID, PROGRAM_LINE#,
       LAST_ACTIVE_TIME 
from v$sql where sql_id = 'sql_id';
  • 目的: 根据给定的 SQL_ID 查看该 SQL 的详细信息,包括执行统计和元数据。

集群查询堵塞链源头

select *
from (select a.inst_id, a.sid, a.serial#,
             a.sql_id,
             a.event,
             a.status,
             connect_by_isleaf as isleaf,
             sys_connect_by_path(a.SID || '@' || a.inst_id, ' <- ') tree,
             level as tree_level
        from gv$session a
       start with a.blocking_session is not null
      connect by (a.sid || '@' || a.inst_id) = prior (a.blocking_session || '@' || a.blocking_instance))
where isleaf = 1
order by tree_level asc;
  • 目的: 在集群环境中跟踪阻塞链,展示被阻塞的会话及其来源。

根据 SQL_ID 查询等待的 SQL 的 SID

SELECT s1.username || '@'|| s1.machine || ' ( SID=' || s1.sid || ' ) is blocking ' ||
       s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status   
FROM v$lock l1, v$session s1, v$lock l2, v$session s2  
WHERE s1.sid = l1.sid AND s2.sid = l2.sid AND l1.BLOCK = 1 AND l2.request > 0 
      AND l1.id1 = l2.id1 AND l2.id2 = l2.id2;
  • 目的: 显示哪个会话正在阻塞另一个会话的详细信息。

根据 SID 查物理系统进程

select spid from v$process t where t.addr in (select paddr from v$session where sid = '上面的sid传到这里');
  • 目的: 找到与特定会话相关联的操作系统进程 ID。

终止会话

alter system kill session '12951,32562';
  • 目的: 杀死指定的会话,以解除锁定或解决阻塞问题。

这段代码提供了一系列功能,用于监控、分析和管理 Oracle 数据库中的锁和会话,有助于 DBA 诊断和解决性能问题。

查看被锁的表

select sess.sid,
       sess.serial#,
       lo.oracle_username,
       lo.os_user_name,
       ao.object_name,
       lo.locked_mode
  from gv$locked_object lo, dba_objects ao, gv$session sess
 where ao.object_id = lo.object_id
   and lo.session_id = sess.sid;

这个查询从gv$locked_objectdba_objectsgv$session中获取信息,以查看当前被锁定的对象及其相关会话信息。

查看锁表信息

select *
  from gv$session t1, gv$locked_object t2
 where t1.sid = t2.SESSION_ID;

该查询用于显示当前所有被锁会话的详细信息。

长时间等待的事务查询

select a.sid, a.serial#, a.username, a.machine, a.program, a.sql_hash_value, a.type, a.LAST_CALL_ET 
  from gv$session a, gv$session_wait b 
 where a.sid=b.sid and b.event='enq: TX - row lock contention';

查询正在等待行锁的会话,帮助识别潜在的资源争用问题。

查询锁对象和相关SQL

select /*+ parallel(16)*/ l.session_id,
       s.serial#,
       l.locked_mode,
       s.event,
       l.oracle_username,
       s.user#,
       l.os_user_name,
       s.machine,
       s.terminal,
       a.sql_text,
       a.action
  from gv$sqlarea a, gv$session s, gv$locked_object l
 where l.session_id = s.sid
   and s.prev_sql_addr = a.address
 order by sid, s.serial#;

此查询列出锁定对象的会话,并关联这些会话最近执行的SQL语句。

长事务查询

select /*+ parallel(8)*/
       t1.inst_id,
       t1.sid,
       t1.serial#,
       t1.username,
       t1.machine,
       t2.start_time,
       t1.status,
       t1.event,
       t1.type,
       t3.sql_text,
       t3.SQL_ID,
       'ALTER SYSTEM KILL SESSION ' || '''' || t1.sid || ',' || t1.serial# || ',@' || t1.inst_id || '''' || ';' as "kill in oracle",
       t2.xid
  from gv$session t1, gv$transaction t2, gv$sqlarea t3
 where t1.taddr = t2.addr
   and t1.inst_id = t2.inst_id
   and t3.hash_value =
       decode(t1.sql_hash_value, 0, t1.prev_hash_value, t1.sql_hash_value)
   and t1.inst_id = t3.inst_id
   and t1.username not in ('', '', '');

该查询用于查找长时间未提交的事务,并准备一个可以终止该会话的命令。

锁表或未正确关闭表的查询

select t2.username,
       t2.sid,
       t2.serial#,
       t3.object_name,
       t2.event,
       t2.OSUSER,
       t2.MACHINE,
       t2.PROGRAM,
       t2.LOGON_TIME,
       t2.COMMAND,
       t2.LOCKWAIT,
       t2.SADDR,
       t2.PADDR,
       t2.TADDR,
       t2.SQL_ADDRESS,
       t1.LOCKED_MODE
  from gv$locked_object t1, gv$session t2, dba_objects t3
 where t1.session_id = t2.sid
   and t1.inst_id = t2.inst_id
   and t1.object_id = t3.object_id
 order by t2.logon_time;

这个查询显示与锁定对象相关的会话信息和事件。

根据SID查询SQL语句

select t1.sid, t1.username, t1.machine, t1.osuser, t1.event, t2.sql_text
  from gv$session t1, gv$sql t2
 where decode(t1.sql_hash_value, 0, t1.prev_hash_value, t1.sql_hash_value) =
       t2.hash_value
   and t1.inst_id = t2.inst_id
   and t1.sid = '20580';

该查询用于获取特定会话ID的SQL语句。

根据事务ID查询SQL语句

select t1.sid,
       t1.username,
       t1.machine,
       t1.osuser,
       t1.event,
       t2.sql_text,
       t2.sql_fulltext
  from gv$session t1, gv$sqlarea t2, gv$transaction t3
 where decode(t1.sql_hash_value, 0, t1.prev_hash_value, t1.sql_hash_value) =
       t2.hash_value
   and t1.inst_id = t2.inst_id
   and t1.TADDR=t3.ADDR
   and t3.XID='9D0709003A670000';

查询特定事务ID的SQL语句和相关信息。

查询长时间不提交的SQL

select a."INST_ID",
       a."SID",
       a."SERIAL#",
       a."EVENT",
       a."USERNAME",
       a."MACHINE",
       b."SQL_TEXT",
       b."SQL_FULLTEXT"
  from gv$session a, v$sqlarea b
 where a."PREV_HASH_VALUE" != '0'
   and a."SQL_HASH_VALUE" = '0'
   and a."PREV_HASH_VALUE" = b."HASH_VALUE";

该查询用于找出长时间没有提交的SQL语句。

这些查询可以帮助DBA监控和管理数据库会话、事务和锁,从而提升数据库性能和稳定性。

Oracle查看标的归属表空间

要查看 Oracle 数据库中表的归属表空间,可以使用以下 SQL 查询:

SELECT table_name, tablespace_name
FROM dba_tables
WHERE owner = '你的用户名'; -- 替换为具体的用户名

如果你想查看所有用户的所有表的归属表空间,可以去掉 WHERE 子句:

SELECT owner, table_name, tablespace_name
FROM dba_tables;

说明

  • dba_tables 视图包含了数据库中所有表的信息,包括表名和它们所归属的表空间。
  • owner 列表示表的拥有者(用户)。
  • tablespace_name 列显示该表所在的表空间。

如果你已经使用了 SELECT username, default_tablespace, temporary_tablespace FROM dba_users;,那么这条语句会显示每个用户的默认表空间和临时表空间,但不会直接显示表的信息。

oracle表空间使用情况

查询目的

这个查询用于检查每个表空间的当前使用情况,包括已用空间、可用空间、总空间、使用百分比等信息。

查询结构

  1. 子查询:
    • FREE: 计算每个表空间的空闲空间(DBA_FREE_SPACE)。
    • TOTAL: 计算每个表空间的总空间和最大可扩展空间(DBA_DATA_FILES)。
  2. 联接:
    • FREETOTAL 子查询结果通过表空间名称进行联接,确保只显示有数据的表空间。
  3. 字段说明:
    • tablespace_name: 表空间的名称。
    • 当前已用空间: 当前已使用的空间量。
    • 当前可用空间: 可用的剩余空间量。
    • 当前可用的总空间: 表空间的总大小。
    • 当前使用百分比: 已使用空间占总空间的百分比。
    • 可扩展到的最大空间: 表空间能够扩展到的最大值。
    • 剩余可扩展的空间: 还可以扩展的空间量。
    • 剩余可扩展的百分比: 剩余可扩展空间的百分比。
    • 剩余可用的最大空间: 可用的最大空间量。

完整查询

SELECT TOTAL.TABLESPACE_NAME AS 表空间名,
       ROUND(TOTAL.MB - FREE.MB, 2) || ' MB' AS 当前已用空间,
       ROUND(FREE.MB, 2) || ' MB' AS 当前可用空间,
       ROUND(TOTAL.MB, 2) || ' MB' AS 当前可用的总空间,
       ROUND((1 - FREE.MB / TOTAL.MB) * 100, 2) || '%' AS 当前使用百分比,
       ROUND(TOTAL.MAX_MB, 2) || ' MB' AS 可扩展到的最大空间,
       DECODE(TOTAL.MAX_MB, 0, 0, ROUND(TOTAL.MAX_MB - TOTAL.MB, 2)) || ' MB' AS 剩余可扩展的空间,
       DECODE(TOTAL.MAX_MB, 0, 0, ROUND((1 - TOTAL.MB / TOTAL.MAX_MB) * 100, 2)) || '%' AS 剩余可扩展的百分比,
       ROUND(TOTAL.MAX_MB - FREE.MB, 2) || ' MB' AS 剩余可用的最大空间
FROM (SELECT TABLESPACE_NAME, SUM(BYTES) / 1024 / 1024 AS MB
      FROM DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME) FREE,
     (SELECT TABLESPACE_NAME,
             SUM(BYTES) / 1024 / 1024 AS MB,
             SUM(MAXBYTES) / 1024 / 1024 AS MAX_MB
      FROM DBA_DATA_FILES
      GROUP BY TABLESPACE_NAME) TOTAL
WHERE FREE.TABLESPACE_NAME = TOTAL.TABLESPACE_NAME
ORDER BY TOTAL.TABLESPACE_NAME;

注意事项

  • 确保你有访问 DBA_FREE_SPACEDBA_DATA_FILES 的权限,否则查询将无法执行。
  • 输出的信息可以帮助数据库管理员监控表空间的使用情况,并进行适时的调整或扩展。

Oracle 表字段的约束

在 Oracle 数据库中,对表字段的约束操作非常重要,以下是关于设置、删除和查询约束的详细说明:

  1. 给表的单个字段加约束

可以使用 ALTER TABLE 命令为表中的单个字段添加唯一约束(UNIQUE):

ALTER TABLE 表名 ADD UNIQUE (字段名);
  1. 删除表的单个字段约束

如果需要删除已经存在的唯一约束,可以使用以下命令:

ALTER TABLE 表名 DROP UNIQUE (字段名);
  1. 给表的多个字段加约束

要为多个字段设置唯一约束,可以指定一个约束名并列出多个字段:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名1, 字段名2, ...);
  1. 删除表的多个字段约束

通过约束名来删除一个已经定义的约束:

ALTER TABLE 表名 DROP CONSTRAINT 约束名;
  1. 查询某表都有哪些约束

可以查询特定表的所有唯一约束,使用以下 SQL 语句:

SELECT CONSTRAINT_NAME 
FROM USER_CONSTRAINTS 
WHERE TABLE_NAME = '表名' AND CONSTRAINT_TYPE = 'U';
  1. 查询某约束都约束了哪些字段

若要查看特定约束所约束的字段,可以使用如下查询:

SELECT COLUMN_NAME 
FROM USER_CONS_COLUMNS 
WHERE CONSTRAINT_NAME = '约束名';

提示

在添加约束时,如果遇到错误信息 ORA-02299: cannot validate (xxx) - duplicate keys found,通常是因为表中已有重复的记录。此时需要先处理这些重复数据,例如删除或更新记录,然后再尝试添加约束。

总结

通过以上操作,可以有效管理 Oracle 数据库中表的字段约束,确保数据的完整性和唯一性。

oracle 函数死锁导致

在 Oracle 数据库中,死锁是一种常见的问题,它发生在两个或多个会话互相等待对方释放的资源。以下是处理死锁时的一些基本步骤,包括如何查询和删除锁定记录。

查询锁定记录

您可以使用以下 SQL 查询语句来查看当前被锁定的对象和相关的会话信息:

SELECT 
    s.sid, 
    s.serial# 
FROM 
    v$locked_object lo
JOIN 
    dba_objects ao ON ao.object_id = lo.object_id
JOIN 
    v$session s ON lo.session_id = s.sid;

删除锁定

如果您需要终止一个会话以解除锁定,可以使用以下命令。请确保替换 SIDserial# 为实际的会话 ID 和序列号。

ALTER SYSTEM KILL SESSION 'SID,serial#';

注意事项

  1. 谨慎操作:在终止会话之前,请确保该会话确实造成了死锁,并确认您有权限执行此操作。
  2. 监控和预防:定期监控数据库的锁定情况,优化事务的设计,以减少死锁的发生。
  3. 日志审查:查看数据库的警报日志和跟踪文件,以获得更多关于死锁的信息和上下文。

通过以上步骤,您可以有效地查询和处理 Oracle 数据库中的死锁问题。

Oracle静默安装启动

Oracle数据库的静默安装可以通过命令行来完成,通常涉及使用响应文件。以下是执行Oracle静默安装的一般步骤:

步骤 1: 准备响应文件

  1. 创建响应文件
    使用Oracle提供的示例响应文件进行修改。示例文件通常位于安装介质的response目录下,例如db_install.rsp

  2. 修改响应文件
    根据您的环境和需求,修改以下参数:

    oracle.install.responseFileVersion=1.0.0.0.0
    oracle.install.option=INSTALL_DB
    oracle.install.db.InstallEdition=EE
    oracle.install.db.DBA_GROUP=dba
    oracle.install.db.ORA_CRS_GROUP=oinstall
    oracle.install.db.config.starterdb.password.ALL=YourPassword
    oracle.install.db.config.starterdb.sid=YourSID
    oracle.install.db.config.starterdb.characterSet=AL32UTF8
    oracle.install.db.config.starterdb.memoryOption=true
    oracle.install.db.config.starterdb.autoGeneratePasswords=false
    oracle.install.db.config.starterdb.memoryLimit=2048
    oracle.install.db.config.starterdb.dataLocation=/u01/app/oracle/oradata
    oracle.install.db.config.starterdb.recoveryLocation=/u01/app/oracle/fast_recovery_area
    

步骤 2: 启动静默安装

  1. 打开命令行界面
    在Linux或Windows中打开终端或命令提示符。

  2. 导航到安装目录
    切换到Oracle安装介质的runInstaller目录,例如:

    cd /path/to/database/
    
  3. 执行安装命令
    使用以下命令启动静默安装:

    ./runInstaller -silent -responseFile /path/to/your/response_file.rsp
    

    对于Windows系统,使用:

    setup.exe -silent -responseFile C:\path\to\your\response_file.rsp
    

步骤 3: 完成安装

  1. 检查日志文件
    安装完成后,可以查看安装日志文件以确认是否成功,日志文件通常位于/u01/app/oraInventory/logsC:\Program Files\Oracle\Inventory\logs
  2. 运行后续配置
    如果需要,执行后续配置,例如设置监听程序等。

注意事项

  • 确保系统满足Oracle数据库的所有先决条件。
  • 根据实际硬件和需求调整内存和其他配置参数。
  • 在生产环境中,建议在测试环境中先尝试静默安装以验证响应文件的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值