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 Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Oracle 打不開的解決辦法包括:1. 啟動數據庫服務;2. 啟動監聽器;3. 檢查端口衝突;4. 正確設置環境變量;5. 確保防火牆或防病毒軟件未阻止連接;6. 檢查服務器是否已關閉;7. 使用 RMAN 恢復損壞的文件;8. 檢查 TNS 服務名稱是否正確;9. 檢查網絡連接;10. 重新安裝 Oracle 軟件。

解決 Oracle 游標關閉問題的方法包括:使用 CLOSE 語句顯式關閉游標。在 FOR UPDATE 子句中聲明游標,使其在作用域結束後自動關閉。在 USING 子句中聲明游標,使其在關聯的 PL/SQL 變量關閉時自動關閉。使用異常處理確保在任何異常情況下關閉游標。使用連接池自動關閉游標。禁用自動提交,延遲游標關閉。

Oracle 數據庫分頁利用 ROWNUM 偽列或 FETCH 語句實現:ROWNUM 偽列用於通過行號過濾結果,適用於復雜查詢。 FETCH 語句用於獲取指定數量的第一行,適用於簡單查詢。

Oracle 中,FOR LOOP 循環可動態創建游標, 步驟為:1. 定義游標類型;2. 創建循環;3. 動態創建游標;4. 執行游標;5. 關閉游標。示例:可循環創建游標,顯示前 10 名員工姓名和工資。

要停止 Oracle 數據庫,請執行以下步驟:1. 連接到數據庫;2. 優雅關機數據庫(shutdown immediate);3. 完全關機數據庫(shutdown abort)。

在CentOS系統上搭建Hadoop分佈式文件系統(HDFS)需要多個步驟,本文提供一個簡要的配置指南。一、前期準備安裝JDK:在所有節點上安裝JavaDevelopmentKit(JDK),版本需與Hadoop兼容。可從Oracle官網下載安裝包。環境變量配置:編輯/etc/profile文件,設置Java和Hadoop的環境變量,使系統能夠找到JDK和Hadoop的安裝路徑。二、安全配置:SSH免密登錄生成SSH密鑰:在每個節點上使用ssh-keygen命令

可以通過使用 Oracle 的動態 SQL 來根據運行時輸入創建和執行 SQL 語句。步驟包括:準備一個空字符串變量來存儲動態生成的 SQL 語句。使用 EXECUTE IMMEDIATE 或 PREPARE 語句編譯和執行動態 SQL 語句。使用 bind 變量傳遞用戶輸入或其他動態值給動態 SQL。使用 EXECUTE IMMEDIATE 或 EXECUTE 執行動態 SQL 語句。

Oracle 亂碼問題可以通過以下步驟解決:檢查數據庫字符集以確保與數據相匹配。設置客戶端字符集以與數據庫相匹配。轉換數據或修改列字符集以匹配數據庫字符集。使用 Unicode 字符集,並避免多字節字符集。檢查數據庫和客戶端的語言設置是否正確。
