Oracle DB 性能视图和数据字典
动态性能视图 用于访问实例内存结构不断变化 的状态信息。 在Oracle DB 中还维护着一个关于数据库实例操作和性能的动态数据集。这些动态性能视 图以基于数据库服务器内部的内存结构构建的虚拟表为基
- 动态性能视图
用于访问实例内存结构不断变化的状态信息。
在Oracle DB 中还维护着一个关于数据库实例操作和性能的动态数据集。这些动态性能视图以基于数据库服务器内部的内存结构构建的虚拟表为基础。也就是说,这些视图不是驻留在数据库中的传统意义上的表。这就是为什么部分视图在数据库装载或打开之前就能够使用的原因。
动态性能视图包含下列信息:
? 会话
? 文件状态
? 作业和任务的进度
? 锁
? 备份状态
? 内存使用率和内存分配
? 系统参数和会话参数
?SQL 执行
? 统计数据和度量
注:DICT 和DICT_COLUMNS视图也包含这些动态性能视图的名称。动态性能视图以前缀“v$”开头,其数量超过590。
- 动态性能视图:用法示例
经常使用这些视图的是Enterprise Manager ,但其他用户也可以根据需要查询这些视图。
1. 哪些SQL 语句(及其相关的执行编号)所占用的CPU 时间大于200,000 微秒?
SQL> SELECT sql_text, executions FROM v$sql WHERE cpu_time > 200000;
2. 在前一天内,哪些当前会话从EDRSR9P1 计算机登录?
SQL> SELECT * FROM v$session WHERE machine = 'EDRSR9P1' and logon_time > SYSDATE - 1;
3. 当前持有阻止其他用户的锁的那些会话的会话ID 是什么?这些锁已持有多长时间?
SQL> SELECT sid, ctime FROM v$lock WHERE block > 0;
- 动态性能视图:注意事项
? 这些视图由SYS 用户所有。
? 不同场合可使用的视图也不同:
– 实例已启动。
– 数据库已装载。
– 数据库已打开。
? 可以通过查询V$FIXED_TABLE 查看所有视图名称。
? 这些视图通常称为“v$ 视图”。
? 因为其数据是动态的,所以在这些视图上不能保证读取一致性。
某些动态视图包含的数据并不适用于实例或数据库的所有状态。例如,如果实例刚启动,但未装载任何数据库,则可以通过查询V$BGPROCESS 来查看正在运行的后台进程的列表。但无法通过查询V$DATAFILE查看数据库数据文件的状态,因为要通过装载数据库来读取控制文件,此后才能找出数据库关联的数据文件。
一些V$视图包含的信息类似于相应DBA_ 视图中的信息。例如,V$DATAFILE类似于DBA_DATA_FILES。另请注意,V$视图名称通常是单数形式,而DBA_ 视图名称是复数形式。
- 数据字典:概览
Oracle 数据字典是数据库的元数据,其中包含数据库中所有对象的名称和属性。创建或修改任何对象都会引起数据字典的更新,以反映这些更改。这些信息存储在由Oracle DB 维护的基表中,不过,可使用预定义视图访问这些表(而不是直接读取表)。
数据字典:
? 由Oracle DB 服务器使用,可用于查找关于用户、对象、约束条件和存储的信息
? 对象结构或定义修改时,Oracle DB 将做出相应维护
? 可供任意用户使用以查询关于数据库的信息
? 由SYS 用户拥有
? 不得使用SQL 直接进行修改
注:DICTIONARY数据字典视图(或其DICT 同义词)包含数据字典表和视图的名称和说明。使用DICT_COLUMNS视图可查看视图列及其定义。
- 数据字典视图
视图前缀指示给定用户可以看到的数据(以及数据量)。
只有拥有DBA 权限的用户才可访问包含所有对象的全局视图(带DBA_ 前缀)。
下一个权限级别是ALL_ 前缀级别,它表示查询用户有权查看的所有对象,无论用户是否拥有这些对象。例如,如果USER_A 被授权访问属于USER_B 的表,那么USER_A 会看到该表列在与表名有关的所有ALL_ 视图中。
前缀USER_代表最小的可见范围。该类型的视图只显示属于查询用户的那些对象(即存在于用户自己方案中的对象)。
一般情况下,每个视图集都是拥有更高权限的视图集的子集,无论按行还是按列。并非给定视图集中的所有视图都在其它视图集中有对应的视图。这取决于视图中信息的性质。
例如,有一个DBA_LOCK 视图,但是并不存在ALL_LOCK 视图。这是因为只有DBA 才关注有关锁的数据。为了满足需要,应确保选择适当的视图集。即便你有权访问DBA 视图,也可能只想查询USER 版本的视图,因为结果会显示你所拥有的对象的相关信息,而你可能不希望结果集中包含其他对象。
DBA_ 视图只能由拥有SYSDBA 或SELECT ANY DICTIONARY 权限的用户查询。
并非所有字典视图都以前缀DBA_、ALL_ 和USER_开头。以下视图或视图的同义词就是
例外:
? AUDIT_ACTIONS
? CAT
? CHANGE_PROPAGATIONS
? CHANGE_PROPAGATION_SETS
? CHANGE_SETS
? CHANGE_SOURCES
? CHANGE_TABLES
? CLIENT_RESULT_CACHE_STATS$
? CLU
? COLS
? COLUMN_PRIVILEGES
? DATABASE_COMPATIBLE_LEVEL
? DBMS_ALERT_INFO
? DBMS_LOCK_ALLOCATED
? DICT
? DICTIONARY
? DICT_COLUMNS
? DUAL
? GLOBAL_NAME
? IND
? INDEX_HISTOGRAM
? INDEX_STATS
? LOGSTDBY_UNSUPPORTED_TABLES
? NLS_DATABASE_PARAMETERS
? NLS_INSTANCE_PARAMETERS
? NLS_SESSION_PARAMETERS
? OBJ
? RECYCLEBIN
? RESOURCE_COST
? ROLE_ROLE_PRIVS
? ROLE_SYS_PRIVS
? ROLE_TAB_PRIVS
? SEQ
? SESSION_PRIVS
? SESSION_ROLES
? SM$VERSION
? SYN
? TABLE_PRIVILEGES
? TABS
- 数据字典:用法示例
1. 方案中已创建的表的名称(以及表所在表空间的名称)是什么?
SELECT table_name, t ablespace_name FROM user_tables;
2. 在你有权访问的数据库中,关于序列的重要信息是什么?
SELECT sequence_name, min_value, max_value, increment_by FROM all_sequences WHERE sequence_owner IN ('MDSYS','XDB');
3. 此数据库中当前可以登录的用户是哪些?
SELECT USERNAME, ACCOUNT_STATUS FROM dba_users WHERE ACCOUNT_STATUS = 'OPEN';
4. DBA_INDEXES 视图的列是什么?这显示了你可以查看数据库中所有索引的哪些信息。
DESCRIBE dba_indexes
下面列出了此命令的部分输出:
SQL> DESCRIBE dba_indexes
Name Null? Type
--------------- -------- -------------
OWNER NOT NULL VARCHAR2(30)
INDEX_NAME NOT NULL VARCHAR2(30)
INDEX_TYPE VARCHAR2(27)
TABLE_OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
-
启用数据字典保护:
你可以通过设置初始化参数O7_DICTIONARY_ACCESSIBILITY 为false来保护数据字典。
此参数可以防止用户(拥有任何系统权限即是在SYS模式对象的权限的用户)来使用这些数据字典。
oracle数据库提供高度细化的权限。
一个这样的特权,通常所说的任何特权,通常授予唯一的应用程序的owners和个人的数据库管理员。
例如,可以授予DROP ANY TABLE 的权限给一个应用程序所有者,通过打开或关闭的07_DICTIONARY_ACCESSIBILITY初始化参数,免遭意外或恶意使用的任何特权,可以保护Oracle数据字典。
启用数据字典保护工作流
-
使用em登陆到Oracle Enterprise Manager Database Control (Database Control).
-
点击Server"服务器",点击Initialization Parameters“初始化参数”。
-
搜索O7_DICTIONARY_ACCESSIBILITY这个参数。
-
将
O7_DICTIONARY_ACCESSIBILTY
设置为FALSE。
<img src="/static/imghw/default1.png" data-src="/inc/test.jsp?url=http%3A%2F%2Fimg.blog.csdn.net%2F20131014162215546%3Fwatermark%2F2%2Ftext%2FaHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmxodWE%3D%2Ffont%2F5a6L5L2T%2Ffontsize%2F400%2Ffill%2FI0JBQkFCMA%3D%3D%2Fdissolve%2F70%2Fgravity%2FSouthEast&refer=http%3A%2F%2Fblog.csdn.net%2Frlhua%2Farticle%2Fdetails%2F12710613" class="lazy" alt="Oracle DB 性能视图和数据字典" >
5.
点击应用,然后重启数据库。
O7_DICTIONARY_ACCESSIBILITY参数:
O7_DICTIONARY_ACCESSIBILITY控制对系统权限的限制。如果该参数被设置为true时,sys模式中的对象都可以访问数据字典。默认设置为false,确保系统权限被允许访问其他任何模式,而不能访问sys模式。
例如,O7_DICTIONARY_ACCESSIBILITY设置为false,那么 SELECT ANY TABLE
的权限允许访问除了sys模式(数据字典不能被访问)中任何视图或表。系统权限EXECUTE
ANY PROCEDURE ,可以访问任何模式除了sys模式。
如果这个参数设置为falise,你需要访问在sys模式的对象,那么必须明确授予对象权限。以下角色,可以授予数据库管理员,也允许访问字典对象:
-
SELECT_CATALOG_ROLE
-
EXECUTE_CATALOG_ROLE
-
DELETE_CATALOG_ROLE

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Oracle에 대한 솔루션은 개설 할 수 없습니다. 1. 데이터베이스 서비스 시작; 2. 청취자를 시작하십시오. 3. 포트 충돌을 확인하십시오. 4. 환경 변수를 올바르게 설정하십시오. 5. 방화벽이나 바이러스 백신 소프트웨어가 연결을 차단하지 않도록하십시오. 6. 서버가 닫혀 있는지 확인하십시오. 7. RMAN을 사용하여 손상된 파일을 복구하십시오. 8. TNS 서비스 이름이 올바른지 확인하십시오. 9. 네트워크 연결 확인; 10. Oracle 소프트웨어를 다시 설치하십시오.

Oracle Cursor Closure 문제를 해결하는 방법에는 다음이 포함됩니다. Close 문을 사용하여 커서를 명시 적으로 닫습니다. For Update 절에서 커서를 선언하여 범위가 종료 된 후 자동으로 닫히십시오. 연관된 PL/SQL 변수가 닫히면 자동으로 닫히도록 사용 절에서 커서를 선언하십시오. 예외 처리를 사용하여 예외 상황에서 커서가 닫혀 있는지 확인하십시오. 연결 풀을 사용하여 커서를 자동으로 닫습니다. 자동 제출을 비활성화하고 커서 닫기를 지연시킵니다.

Oracle 데이터베이스 페이징은 rownum pseudo-columns 또는 fetch 문을 사용하여 구현합니다. Fetch 문은 지정된 첫 번째 행 수를 얻는 데 사용되며 간단한 쿼리에 적합합니다.

Oracle에서 FOR 루프 루프는 커서를 동적으로 생성 할 수 있습니다. 단계는 다음과 같습니다. 1. 커서 유형을 정의합니다. 2. 루프를 만듭니다. 3. 커서를 동적으로 만듭니다. 4. 커서를 실행하십시오. 5. 커서를 닫습니다. 예 : 커서는 상위 10 명의 직원의 이름과 급여를 표시하기 위해주기별로 만들 수 있습니다.

Oracle 데이터베이스를 중지하려면 다음 단계를 수행하십시오. 1. 데이터베이스에 연결하십시오. 2. 즉시 종료; 3. 셧다운은 완전히 중단됩니다.

SQL 문은 Oracle의 동적 SQL을 사용하여 런타임 입력을 기반으로 작성 및 실행할 수 있습니다. 단계에는 다음이 포함됩니다 : 동적으로 생성 된 SQL 문을 저장할 빈 문자열 변수 준비. 즉시 실행 또는 준비 명령문을 사용하여 동적 SQL 문을 컴파일하고 실행하십시오. 바인드 변수를 사용하여 사용자 입력 또는 기타 동적 값을 동적 SQL로 전달하십시오. 동적 SQL 문을 실행하려면 즉시 실행 또는 실행을 사용하십시오.

Oracle 데이터베이스를 열기위한 단계는 다음과 같습니다. Oracle 데이터베이스 클라이언트를 열고 데이터베이스 서버에 연결하십시오. username/password@servername sqlplus 명령을 사용하여 데이터베이스를 엽니 다.

AWR 보고서는 데이터베이스 성능 및 활동 스냅 샷을 표시하는 보고서입니다. 해석 단계에는 다음이 포함됩니다 : 활동 스냅 샷의 날짜 및 시간 식별. 활동 및 자원 소비에 대한 개요를 봅니다. 세션 활동을 분석하여 세션 유형, 자원 소비 및 대기 이벤트를 찾으십시오. 느린 SQL 문, 자원 경합 및 I/O 문제와 같은 잠재적 성능 병목 현상을 찾으십시오. 대기 이벤트를보고, 성능을 위해 식별하고 해결하십시오. 래치 및 메모리 사용 패턴을 분석하여 성능 문제를 일으키는 메모리 문제를 식별하십시오.
