oralce的sga会分割内存
在 Oracle 数据库中,系统全局区(SGA,System Global Area)是一个共享内存区域,用于存储数据库的运行时信息。SGA 的内存会被划分为多个组件,每个组件负责不同的功能。以下是 SGA 的主要组成部分:
- 数据库缓冲区缓存(Database Buffer Cache)
- 用于存储从磁盘读取的数据块,以减少对磁盘的访问,提高性能。
- 共享池(Shared Pool)
- 存储解析过的 SQL 语句、PL/SQL 代码、数据字典信息等,旨在提高重用率,减少解析开销。
- 重做日志缓冲区(Redo Log Buffer)
- 存储未写入到重做日志文件的更改,以确保数据的持久性和恢复能力。
- 大对象(Large Object)缓存(Large Pool)
- 用于支持大对象(LOB)的操作,尤其是用于并行处理和备份操作。
- Java 池(Java Pool)
- 为 Java 程序提供内存支持,存储 Java 运行时环境所需的信息。
SGA 内存分配
- SGA 的总大小可以在初始化参数中设置,具体的组件大小可以通过参数进行调整,如
DB_CACHE_SIZE
、SHARED_POOL_SIZE
等。
动态调整
Oracle 还支持自动内存管理(AMM),通过设置 MEMORY_TARGET
和 MEMORY_MAX_TARGET
参数,可以动态调整 SGA 和 PGA(程序全局区)的大小,以优化性能。
总结
SGA 的分割与管理是 Oracle 数据库性能优化的重要组成部分,合理配置各个组件的大小,有助于提升数据库的整体性能。
Oracle死锁操作
在 Oracle 数据库中,处理和分析死锁的操作步骤可以按以下方式进行。以下是您提到的查询步骤的详细说明。
- 查看死锁相关信息
使用 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。
- 查看被死锁的 SQL 语句
要查找引发死锁的具体 SQL 语句,可以使用以下查询。这通常涉及到查看 V S Q L 和 V SQL 和 V SQL和VSESSION 视图。
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 语句。
- 死锁的后续处理
一旦识别出死锁的会话和 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. 通过网络复制备份的数据文件和备用控制文件到备库主机
使用操作系统命令(如scp
或rsync
)将备份的数据文件和控制文件复制到备用库的相应目录。
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数据库中,日志序列的完整性至关重要。以下是你提供的内容的解释:
- 日志序列缺失的手动恢复
如果发现备库的日志序列有缺失,首先需要将主库中的归档日志复制到备库的日志目录。这可以通过手动操作完成,确保备库能够获取到所需的日志文件进行恢复。
- 恢复命令
SQL> recover automatic standby database;
这是用于自动恢复备库的命令。SQL> recover standby database until cancel;
该命令允许你在恢复过程中手动控制,直到你选择取消为止。
- 检查日志序列是否缺失
使用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#;
- 查询结果解读
LowGap#
:表示当前线程中最低的缺失序列号。HighGap#
:表示当前线程中最高的缺失序列号。
如果同一个 thread#
的 LowGap#
和 HighGap#
不相等,说明存在日志序列的缺失。如果这两个值相等,或者查询结果为空,表明没有缺失的日志序列。
- 总结
这个过程是为了确保备库能够正确应用来自主库的事务日志,从而保持数据的一致性。如果发现缺失,需要及时进行手动恢复,以保证备库的可靠性和完整性。
12. 将备库置于自管理模式
最后,执行以下命令以将备库置于自管理模式:
SQL> alter database recover managed standby database using current logfile disconnect from session;
- 将备库置于自管理模式
-
命令:
SQL> recover managed standby database;
此命令用于启动备库的自管理恢复模式。在这个模式下,备库将自动从主库接收归档日志并应用这些日志,以保持数据一致性和实时同步。这意味着备库会持续运行,直到你手动终止该模式。
- SQL*Plus窗口的停止响应
当执行上述命令后,SQL*Plus窗口会停止响应。这是因为系统在执行恢复操作并等待日志的到来。此时,备库正在后台处理日志,而用户界面不再接受其他输入。
- 取消自管理模式
-
命令:
SQL> recover managed standby database cancel;
如果你需要停止备库的自管理恢复模式,可以使用这个命令。执行后,备库将停止接收和应用日志,并返回到可以接受其他操作的状态。这通常用于进行管理操作或维护任务。
- 总结
将备库置于自管理模式是确保数据实时同步的重要手段,而取消该模式则为管理员提供了灵活性,以便进行其他必要的操作。
Oracle数据库导入导出——expdp/impdp
在Oracle数据库中,expdp
(数据泵导出)和impdp
(数据泵导入)是用于数据导出与导入的工具。它们比传统的exp
和imp
工具更高效、更灵活。以下是对expdp
和impdp
的详细解释:
数据泵导出 (expdp
)
- 基本用法
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: 导出日志文件名,用于记录操作的详细信息。
- 参数选项
tables
: 导出特定表。full
: 导出整个数据库。content
: 控制导出的内容(例如:ALL, DATA_ONLY, METADATA_ONLY)。
数据泵导入 (impdp
)
- 基本用法
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: 导入日志文件名,用于记录操作的详细信息。
- 参数选项
tables
: 导入特定表。full
: 导入整个数据库。remap_schema
: 重新映射导入的模式。
- 创建目录对象
在使用expdp
和impdp
之前,需要确保在数据库中创建了一个目录对象,并且用户具有对此目录的读写权限。
CREATE DIRECTORY data_pump_dir AS '/path/to/directory';
GRANT READ, WRITE ON DIRECTORY data_pump_dir TO username;
- 注意事项
- 确保Oracle数据库版本支持数据泵功能。
- 导出和导入操作可能会受到权限的影响,因此确保用户有足够的权限。
- 导出文件通常为
.dmp
格式,日志文件为.log
格式。
- 总结
expdp
和impdp
是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语句并返回结果。
- 视图的基本概念
- 虚拟表: 视图表现得像一个真实的表,但实际上并不存储数据。
- 基于查询: 视图的内容由定义它时的SELECT查询结果决定。
- 简化复杂查询: 通过将复杂的查询封装在视图中,可以简化应用程序和用户的访问。
- 视图的类型
- 简单视图: 基于单个表的视图,不包含聚合函数或分组等复杂操作。
- 复杂视图: 可以基于多个表,可能包含连接、聚合函数、分组等。
- 创建视图
使用 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';
- 使用视图
- 查询视图:
SELECT * FROM employee_view;
- 更新视图: 简单视图可以用于INSERT、UPDATE和DELETE操作,但复杂视图通常不支持这些操作。
- 管理视图
- 修改视图: 使用
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;
- 视图的优势
- 安全性: 可以限制用户访问特定数据,通过视图只展示用户需要的数据。
- 简化复杂性: 将复杂的查询逻辑封装在视图中,简化数据访问。
- 数据抽象: 提供一种从物理表中隐藏数据结构的方式,增强数据的抽象性。
- 注意事项
- 性能考虑: 视图的性能依赖于底层查询的复杂性。复杂视图可能导致性能下降。
- 可更新性: 并非所有视图都是可更新的,具体取决于视图的定义和涉及的表。
- 依赖关系: 如果基础表结构发生变化(如列删除),依赖于该表的视图可能会失效。
- 物化视图
物化视图是另一种视图类型,它存储了查询结果,可以提高性能,尤其是在处理大量数据时。
- 创建物化视图:
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;
关键点说明:
- 使用
USERNAME
:由于PARSING_USER_ID
是用户ID,通常我们更希望看到的是用户名,因此在查询中用u.USERNAME
替换了PARSING_USER_ID
. - 别名使用:使用
AS
为列提供易读的别名。 - 性能考虑:这个查询会返回所有列的信息,但如果只关注特定信息,可以选择性地列出所需字段,以提升性能。
- 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数据库中,进行多表备份可以通过几种方式实现。以下是一些常见的方法:
- 使用
EXPDP
和IMPDP
工具
Oracle的Data Pump工具允许你导出和导入数据库对象,比如表、用户等。
导出多个表示例:
expdp username/password DIRECTORY=your_directory DUMPFILE=backup.dmp LOGFILE=backup.log TABLES=table1,table2,table3
- 使用
RMAN
备份
如果你需要备份整个数据库或某些表空间,可以使用RMAN(Recovery Manager)。
备份命令示例:
RMAN> BACKUP DATABASE;
- 使用SQL*Plus生成表数据
可以使用SQL*Plus将多个表的数据导出到文件中。
示例:
SET MARKUP CSV ON DELIMITER ',' QUOTE ON
SPOOL backup_file.csv
SELECT * FROM table1;
SELECT * FROM table2;
SPOOL OFF;
- 使用
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');
注意事项
- 闪回日志:确保数据库已启用闪回功能,并且闪回日志能够追溯到指定的时间点。
- 权限:执行闪回查询的用户需要具有相应的权限。
- 时间点:确保指定的时间点在表的历史记录范围内。
检查闪回日志
如果您不确定是否可以查询该时间点的数据,可以检查闪回日志的保留策略:
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_history
和gv$session
。以下是您提供的SQL查询的详细解读,以及一些可能的优化建议。
- 分析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(*)
来确定最常见的阻塞源。
- 实时查询当前活动会话
您的第三个查询用于实时监控当前活跃的会话:
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';
- 建议:此查询有效地显示所有活跃会话的信息,您可以进一步过滤特定用户或程序,以便更好地诊断问题。
综合建议
- 监控和警报:设置监控和警报机制,以便在检测到锁争用或长时间等待的情况时及时通知。
- 执行计划分析:对于经常导致阻塞的SQL,使用
EXPLAIN PLAN
分析其执行计划,以查找潜在的性能瓶颈。 - SQL优化:对频繁出现的SQL进行优化,如调整索引、重写查询等,以减少锁争用。
- 资源管理:监控系统资源使用情况(如CPU、内存、I/O),并根据需要调整资源分配。
通过以上的查询和策略,您可以更有效地管理锁表问题,并提高Oracle数据库的性能。
Oracle查看执行进度
您的SQL查询用于监控Oracle数据库中的执行进度、查询正在执行的SQL以及分析争用对象。以下是对您提供的各个查询的详细解读和优化建议。
- 查看执行进度
这个查询显示了当前长时间运行的操作的执行进度:
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
表中有记录。如果没有记录,可能是因为没有执行足够长的操作。 - 可以考虑增加条件,例如过滤特定的用户名或机器,以便更精确地监控。
- 确保在执行此查询时,
- 查看物理进程对应的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的判断以避免混淆。
- 确保
- 查争用对象
此查询用于查找在特定时间范围内因行锁争用而被阻塞的会话:
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进行分析,并考虑重构查询或增加索引。
停止定时任务
-
查看当前定时任务
SELECT * FROM user_jobs;
- 这个查询用于列出当前用户下的所有定时任务。
-
查看数据库中的所有调度器任务
SELECT owner, job_name, job_action, job_type FROM dba_scheduler_jobs;
- 这个查询返回所有用户的调度器任务,可以用来获取任务的详细信息。
-
禁用特定的调度任务
BEGIN DBMS_SCHEDULER.DISABLE('<owner>.<job_name>'); END;
- 替换
<owner>
和<job_name>
为具体的拥有者和任务名称,以禁用相应的调度任务。
- 替换
启动定时任务
-
创建新的调度任务
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
存在且具有正确的权限。
- 这里定义了一个名为
-
启用已存在的调度任务
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
: 实例IDsid
: 会话IDtype
: 锁类型(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
: 会话IDTYPE
: 锁类型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_object
、dba_objects
和gv$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表空间使用情况
查询目的
这个查询用于检查每个表空间的当前使用情况,包括已用空间、可用空间、总空间、使用百分比等信息。
查询结构
- 子查询:
- FREE: 计算每个表空间的空闲空间(
DBA_FREE_SPACE
)。 - TOTAL: 计算每个表空间的总空间和最大可扩展空间(
DBA_DATA_FILES
)。
- FREE: 计算每个表空间的空闲空间(
- 联接:
- 将
FREE
和TOTAL
子查询结果通过表空间名称进行联接,确保只显示有数据的表空间。
- 将
- 字段说明:
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_SPACE
和DBA_DATA_FILES
的权限,否则查询将无法执行。 - 输出的信息可以帮助数据库管理员监控表空间的使用情况,并进行适时的调整或扩展。
Oracle 表字段的约束
在 Oracle 数据库中,对表字段的约束操作非常重要,以下是关于设置、删除和查询约束的详细说明:
- 给表的单个字段加约束
可以使用 ALTER TABLE
命令为表中的单个字段添加唯一约束(UNIQUE):
ALTER TABLE 表名 ADD UNIQUE (字段名);
- 删除表的单个字段约束
如果需要删除已经存在的唯一约束,可以使用以下命令:
ALTER TABLE 表名 DROP UNIQUE (字段名);
- 给表的多个字段加约束
要为多个字段设置唯一约束,可以指定一个约束名并列出多个字段:
ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (字段名1, 字段名2, ...);
- 删除表的多个字段约束
通过约束名来删除一个已经定义的约束:
ALTER TABLE 表名 DROP CONSTRAINT 约束名;
- 查询某表都有哪些约束
可以查询特定表的所有唯一约束,使用以下 SQL 语句:
SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = '表名' AND CONSTRAINT_TYPE = 'U';
- 查询某约束都约束了哪些字段
若要查看特定约束所约束的字段,可以使用如下查询:
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;
删除锁定
如果您需要终止一个会话以解除锁定,可以使用以下命令。请确保替换 SID
和 serial#
为实际的会话 ID 和序列号。
ALTER SYSTEM KILL SESSION 'SID,serial#';
注意事项
- 谨慎操作:在终止会话之前,请确保该会话确实造成了死锁,并确认您有权限执行此操作。
- 监控和预防:定期监控数据库的锁定情况,优化事务的设计,以减少死锁的发生。
- 日志审查:查看数据库的警报日志和跟踪文件,以获得更多关于死锁的信息和上下文。
通过以上步骤,您可以有效地查询和处理 Oracle 数据库中的死锁问题。
Oracle静默安装启动
Oracle数据库的静默安装可以通过命令行来完成,通常涉及使用响应文件。以下是执行Oracle静默安装的一般步骤:
步骤 1: 准备响应文件
-
创建响应文件
使用Oracle提供的示例响应文件进行修改。示例文件通常位于安装介质的response
目录下,例如db_install.rsp
。 -
修改响应文件
根据您的环境和需求,修改以下参数: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: 启动静默安装
-
打开命令行界面
在Linux或Windows中打开终端或命令提示符。 -
导航到安装目录
切换到Oracle安装介质的runInstaller
目录,例如:cd /path/to/database/
-
执行安装命令
使用以下命令启动静默安装:./runInstaller -silent -responseFile /path/to/your/response_file.rsp
对于Windows系统,使用:
setup.exe -silent -responseFile C:\path\to\your\response_file.rsp
步骤 3: 完成安装
- 检查日志文件
安装完成后,可以查看安装日志文件以确认是否成功,日志文件通常位于/u01/app/oraInventory/logs
或C:\Program Files\Oracle\Inventory\logs
。 - 运行后续配置
如果需要,执行后续配置,例如设置监听程序等。
注意事项
- 确保系统满足Oracle数据库的所有先决条件。
- 根据实际硬件和需求调整内存和其他配置参数。
- 在生产环境中,建议在测试环境中先尝试静默安装以验证响应文件的正确性。