oracle數(shù)據(jù)庫日常管理
/*
why not 維護
*/
-- 數(shù)據(jù)庫管理
$ lsnrctl status ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 監(jiān)聽狀態(tài)
$ lsnrctl start ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 啟動監(jiān)聽
$ lsnrctl stop ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 停止監(jiān)聽
$ sqlplus / as ?sysdba ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 使用sys用戶s連接庫
startup; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 啟動數(shù)據(jù)庫實例
shutdown; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 關閉數(shù)據(jù)庫實例
SHUTDOWN IMMEDIATE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 立即關閉數(shù)據(jù)庫
-- 1、注意賬戶鎖定、密碼鎖定
ALTER PROFILE default LIMIT password_life_time UNLIMITED; ? -- 密碼永不過期
alter system set deferred_segment_creation=FALSE; ? ? ? -- 新建的空表給分配段
-- 2、數(shù)據(jù)文件數(shù)量限制
alter system set db_files=1024 scope=spfile; ?
-- 3、開啟審計 注意 系統(tǒng)表空間
-- 全局
show user ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 查看當前用戶
select username from dba_users; ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 所有用戶
archive log list ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 歸檔相關信息
select service_id, name,pdb from v$services; ? ? ? ? ? ? ?-- 查看service情況
select INSTANCE_NAME from v$instance; ? ? ? ? ? -- 實例名
select * from v$version ? ? ? ? -- 版本信息,核心版本信息
select userenv('language') from dual; ? -- 服務端字符集
show pdbs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 顯示所有pdb 和狀態(tài)
show con_name; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 顯示當前pdb數(shù)據(jù)庫
select name,cdb from v$database; ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 檢查db是否為cdb
alter session set container=CDB1PDB; ? ? ? ? ? ? ? ? ? ? ? ?-- 切換到指定pdb數(shù)據(jù)庫
ALTER PLUGGABLE DATABASE cdb1pdb OPEN; ? ? ? ? ? ? ? ? ? -- 開啟
ALTER PLUGGABLE DATABASE cdb1pdb CLOSE; ? ? ? ? ? ? ? ?-- 關閉
create pluggable database cdb1hf admin user hf identified by hf file_name_convert=('/u01/app/oracle/oradata/cdb1/pdbseed/','/data/hf/'); ?-- 使用seed模板創(chuàng)建pdb
ALTER PROFILE default LIMIT password_life_time UNLIMITED; ? --密碼永不過期
alter system set deferred_segment_creation=FALSE; ? ? ? --新建的空表給分配段
alter system set audit_sys_operations=true scope=spfile; ? ?--sys用戶審計
? scope=spfile -- 僅僅更改spfile里面的記載,不更改內(nèi)存,也就是不立即生效,而是等下次數(shù)據(jù)庫啟動生效有一些參數(shù)只允許用這種方法更改
? scope=memory -- 僅僅更改內(nèi)存,不改spfile。也就是下次啟動就失效了
? scope=both ? -- 內(nèi)存和spfile都更改,不指定scope參數(shù),等同于scope=both
-- 調(diào)整Oracle的內(nèi)存參數(shù) asmm
show parameter sga
alter system set sga_max_size=819200M scope=spfile;
alter system set sga_target=819200M scope=spfile;
set serveroutput on; ? ? ? ?-- 輸出PL/SQL塊的執(zhí)行結果
select * from gv$resource_limit; ?-- 查看process和sessions,更方便
select * from v$sgainfo;
alter system set processes=1500 scope=spfile; ?-- sessions的參數(shù)是processes派生的不需要單獨調(diào)整
-- 創(chuàng)建表空間(在12c版本下需要在每一個pdb中建立表空間,否則用戶無法創(chuàng)建)
CREATE TABLESPACE ESENSOFT DATAFILE '/home/oracle/esensoft.dbf' size 40m autoextend on next 50m maxsize 20480m EXTENT MANAGEMENT LOCAL;
-- ? ? 指定表空間名、指定表空間文件位置、開啟表空間自增長、每次增長50兆、最大為20480兆
?
-- 刪除用戶下所有
DROP USER cmd CASCADE;
-- 刪除表空間及其數(shù)據(jù)文件
DROP TABLESPACE cmd INCLUDING CONTENTS AND DATAFILES;
-- 臨時表空間
-- 臨時表空間數(shù)據(jù)文件信息
select * from dba_temp_files
select tablespace_name,file_name,bytes / 1024 / 1024 file_size,autoextensible from dba_temp_files
-- 臨時表空間free空間信息,需要參考上條命令信息
SELECT TABLESPACE_NAME, FREE_SPACE / 1024 / 1024 / 1024 AS "FREE SPACE(G)" FROM DBA_TEMP_FREE_SPACE
-- WHERE TABLESPACE_NAME = TEMP --'&tablespace_name';
select * from V$TEMP_EXTENT_POOL
-- 創(chuàng)建新的臨時表空間
CREATE TEMPORARY TABLESPACE CDM_TEMP
? ?TEMPFILE '/u01/app/oracle/oradata/ORCL/cdm_temp01.dbf' SIZE 100M AUTOEXTEND ON; ?
-- 數(shù)據(jù)文件自動擴展
ALTER DATABASE TEMPFILE '/u01/app/oracle/oradata/ORCL/cdm_temp01.dbf' AUTOEXTEND ON NEXT 128M ?MAXSIZE UNLIMITED;
-- 添加新的數(shù)據(jù)文件
ALTER TABLESPACE CDM_TEMP ADD TEMPFILE '/u01/app/oracle/oradata/ORCL/cdm_temp02.dbf' SIZE 100M ?AUTOEXTEND ON NEXT 128M ?MAXSIZE UNLIMITED;
-- 切換用戶的臨時表空間
ALTER USER AH_SJPT_CDM ?TEMPORARY TABLESPACE CDM_TEMP;
-- 表空間
-- 自增序號
select 'alter tablespace vmaccount add datafile ''/u01/app/oracle/oradata/ORCL/vmaccount_'||rownum||'.dbf'' size 100M autoextend on next 40m;' from dba_data_files
create tablespace huangshan_ods datafile '/data/huangshan_ods01.dbf' size 100M autoextend on next 40m;
alter tablespace huangshan_ods add datafile '/data/huanshan_ods02.dbf' size 100m autoextend on next 40m;
ALTER DATABASE DATAFILE '/data/huanshan_ods02.dbf' AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED;
select tablespace_name from dba_tablespaces; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 查看表空間列表
select * from v$tablespace; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 表空間信息
select file_name,tablespace_name from dba_data_files; ? ? ? ? ? ? ? ? ? ? ? ? ?-- 表空間數(shù)據(jù)文件所處位置
? select tablespace_name,file_name,bytes from DBA_DATA_FILES;
select default_tablespace from dba_users where username='SHOW'; ? ? ? ? ? ? ?-- 指定用戶默認表空間
drop tablespace HFGAOXINQU_ODS including contents; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 刪除表空間及其內(nèi)容
drop tablespace HFGAOXINQU_ODS including contents; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 刪除表空間及其內(nèi)容
drop tablespace ANHUI_ODS including contents and datafiles; ? ? ? ? ? ? ? ?-- 刪除表空間及其數(shù)據(jù)文件
? ? drop tablespace ANHUI_ODS_NEW including contents and datafiles;
alter database datafile '/home/oracle/esensoft.dbf' offline drop ? ? ? ? ? ? ? -- 刪除數(shù)據(jù)文件和表空間的關系
select name, bytes/1024/1024/1024 as G from v$datafile ? ? ? ? ? ? ? ?-- ? ?數(shù)據(jù)文件大小
show parameter db_block_size ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- ?顯示默認數(shù)據(jù)塊大小
show parameter db_files; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 查看數(shù)據(jù)文件上限
alter system set db_files=1024 scope=spfile; ? ? ? ? ? ? ? ? ? ? ? ?-- ?修改數(shù)據(jù)文件上限,修改參數(shù)文件
-- SYSAUX 表空間
-- 清理審計記錄 ?SYSAUX ORA-01652
? begin
? ? dbms_audit_mgmt.clean_audit_trail(audit_trail_type ? ? ? ?=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
? ? ? ? ? ? ? ? ? ? use_last_arch_timestamp => FALSE);
? end;
?-- 查看SYSAUX表空間信息-V$SYSAUX_OCCUPANTS
select OCCUPANT_NAME, SCHEMA_NAME,MOVE_PROCEDURE ,SPACE_USAGE_KBYTES from V$SYSAUX_OCCUPANTS;
-- 數(shù)據(jù)文件使用情況
SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES/1024/1024 AS "BYTES(M)"
? FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = '&tablespace_name'
alter table OE_DOCTOR move tablespace FENGYANGXIAN_ODS_NEW; ? ? ? ? ? ? ? ? ? ? -- 數(shù)據(jù)表切換表空間
select a.tablespace_name "表空間名",
? ? ? ?total "表空間大小",
? ? ? ?free "表空間剩余大小",
? ? ? ?(total - free) "表空間使用大小",
? ? ? ?total / (1024 * 1024 * 1024) "表空間大小G",
? ? ? ?free / (1024 * 1024 * 1024) "表空間剩余大小G",
? ? ? ?(total - free) / (1024 * 1024 * 1024) "表空間使用大小G"
? from (select tablespace_name, SUM(bytes) free
? ? ? ? ? from dba_free_space
? ? ? ? ?group by tablespace_name) a,
? ? ? ?(select tablespace_name, SUM(bytes) total
? ? ? ? ? from dba_data_files
? ? ? ? ?group by tablespace_name) b
?where a.tablespace_name = b.tablespace_name;
-- 用戶
create user test identified by Gxrj2020 default tablespace PREDATABASE; ? ? ? ? -- 創(chuàng)建用戶
alter user test quota unlimited on PREDATABASE; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 授予用戶使用指定表空間
alter user ah_sjpt_cdm identified by ah_sjpt_cdm; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 修改用戶密碼
? ? alter user sys identified by ahjyadmin2021;
grant dba to c##show; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 授予用戶dba權限
alter user sys identified by ?ahjy2021; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 修改用戶口令
drop user XXXX cascade; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 刪除用戶,及其對象
? ? drop user ANHUI_ODS_NEW cascade;
SELECT username, account_status FROM dba_users; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 查詢用戶狀態(tài)(密碼過期 ?鎖定)
alter user FENGYANGXIAN_ODS ?account unlock; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 解鎖指定用戶
select * from dba_users t where t.username like '%ODS'; ? ? ? ? ? ? ? ? ? ? ? ? -- 查看所有用戶信息
select table_name from user_tables; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 查看當前用戶下所有表信息 ?num_rows字段代表表內(nèi)數(shù)據(jù)量
-- 用戶密碼過期被鎖定 根據(jù)實際情況修改密碼
ORA-28001: the password has expired
ORA-28000: the account is locked
select * from dba_profiles where profile = 'DEFAULT' and resource_name = 'PASSWORD_LIFE_TIME';
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
alter user c##mh_new identified by 123456;
alter user c##mh_new account unlock;
-- 刪除用戶
select sid,serial# from v$session where username='AH_ZHIKONG';
alter system kill session '11090,29827';
drop user ah_zhikong cascade;
-- 批量刪除一個用戶的session
declare
begin
? for temp in (select username, sid, serial#
? ? ? ? ? ? ? ? ?from v$session s
? ? ? ? ? ? ? ? where s.USERNAME = 'QMJK109_ODS_340000') loop
? ? dbms_output.put_line('alter system kill session ''' ||
? ? ? ? ? ? ? ? ? ? ? ? ?to_char(temp.sid) || ',' || to_char(temp.serial#) ||
? ? ? ? ? ? ? ? ? ? ? ? ?''';');
? end loop;
end;
ORA-28040 ? -- 更新驅(qū)動一樣的
# sqlnet.ora.rac01 Network Configuration File: /u01/app/12.2.0.1/grid/network/admin/sqlnet.ora.rac01
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
-- 修改Oracle的用戶名:
-- 1、用sysdba角色賬號進入,然后查詢有哪些用戶:
SELECT * FROM user$
-- 2、找到需要修改的用戶(user#字段是唯一標識)
SELECT * FROM user$ WHERE user#=241
-- 3、修改需要更改的用戶名
UPDATE USER$ SET NAME='FEIDONG_ODS_NEW' WHERE user#=241;
COMMIT;
-- 4、強制刷新
ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM FLUSH SHARED_POOL;
-- 5、再將新的用戶名對應的密碼修改下(否則無法登錄)
ALTER USER FEIDONG_ODS_NEW IDENTIFIED BY FEIDONG_ODS_NEW2021;
-- JDBC
-- SID
jdbc:oracle:thin:@host:port:SID
-- ServiceName
jdbc:oracle:thin:@//host:port/service_name
-- TNSName
jdbc:oracle:thin:@TNSName
-- 表
truncate table OT_JBGW_DIABETES_FOLLOWUP; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 刪除表內(nèi)所有數(shù)據(jù)(不可回滾)
alter table ?ot_jbgw_hyper_followup rename column JBGW_HYP_FOLLOWUP_007 to OT_JBGW_HYP_FOLLOWUP_007; ? ?-- 修改字段名
select * from v$logfile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 日志文件信息
select * from dba_data_files; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 數(shù)據(jù)文件信息
select * from v$controlfile; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 控制文件信息
select con_id,name from v$containers; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- pdb信息
select name from v$database; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 查看全局數(shù)據(jù)庫名
select instance_name from v$instance; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -- 查看數(shù)據(jù)庫實例名
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ? ? ? ? ? ? ? ? ? -- 數(shù)據(jù)庫當前時間
analyze table my_table compute statistics for table for all indexes for all columns; ? ? ?-- 分析指定表字段和索引
analyze table my_table delete statistics; ? ? ? ? ? ? ? ? ? ? ? ? ?-- 刪除指定表分析數(shù)據(jù)
-- 添加新字段替換舊的字段,在數(shù)據(jù)沒辦法更新時使用
alter table OUTPATIENT_PRESCRIPTION add PERFORM_DATE_1 date
alter table OUTPATIENT_PRESCRIPTION rename column PERFORM_DATE to PERFORM_DATE_2;
alter table OUTPATIENT_PRESCRIPTION rename column PERFORM_DATE_1 to PERFORM_DATE;
-- 指定表大小
SELECT segment_name AS TABLENAME,
? ? ? ?BYTES B,
? ? ? ?BYTES / 1024 KB,
? ? ? ?BYTES / 1024 / 1024 MB,
? ? ? ?ROUND(BYTES / 1024 / 1024 / 1024, 2) GB
? FROM user_segments
?where segment_name like 'OT_JTYS_P%'
-- 塊大小
SELECT VALUE FROM V$PARAMETER WHERE NAME='db_block_size'
-- 更新統(tǒng)計信息 ?收集表對象的統(tǒng)計信息
SELECT ' CALL ?DBMS_STATS.GATHER_TABLE_STATS(''VMACCOUNT'', ''' || TABLE_NAME || ''');'
? FROM DBA_TABLES TT
?WHERE TT.OWNER = 'VMACCOUNT'
?
-- 計算表對象占用的空間信息
SELECT OWNER ? ? ? ? ? ? ? ? ? ?OWNER_NAME
? ? ? ,TABLE_NAME ? ? ? ? ? ? ? TABLE_NAME
? ? ? ,TABLESPACE_NAME ? ? ? ? ?TABLESPACE_NAME
? ? ? ,BLOCKS ? ? ? ? ? ? ? ? ? ACTUAL_BLOCKS
? ? ? ,BLOCKS + EMPTY_BLOCKS ? ?TOTAL_BLOCKS
? ? ? ,ROUND((BLOCKS + EMPTY_BLOCKS) * 8192/(1024*1024))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "TABLE_SIZE[MB]"
FROM DBA_TABLES
WHERE OWNER='VMACCOUNT'
?-- AND TABLE_NAME=&TABLE_NAME
?
-- 主鍵
alter table OT_JTYS_SIGN
? add constraint SP_NO_PK primary key (OT_JTYS_SIGN_NO, OT_JTYS_SP_NO)
alter table OT_JTYS_SIGN
? drop constraint PK_OT_JTYS_SIGN cascade;
--
all_col_comments
all_tab_cols -- 字段
-- 查看某張表的主鍵(全庫) user_constraints(單用戶)
select * from dba_constraints dc where dc.CONSTRAINT_TYPE = 'P' and dc.TABLE_NAME = 'OT_JTYS_SI'
-- 索引
? -- 重建索引
select 'alter index ' || index_name || ' rebuild tablespace AH_ZHIKONG; '
? from user_indexes
-- 分配給一個表的物理空間數(shù)量,而不管空間是否被使用
select segment_name, SUM(round(BYTES / 1024 / 1024, 2)) || 'M'
? from user_segments
?GROUP BY segment_name;
-- 實際使用的空間
-- 先統(tǒng)計分析表
select 'analyze table ' || TABLE_NAME || ' compute statistics; '
? from user_tables;
select t.TABLE_NAME,
? ? ? ?round(t.num_rows * t.avg_row_len / 1024 / 1024, 2) "實際大小(M)"
? from user_tables t
-- Analyze
-- 全分析
analyze table my_table compute statistics for table for all indexes for all columns;
-- 指定表
analyze table my_table compute statistics for table;
-- 指定所有字段
analyze table my_table compute statistics for all columns;
-- 指定有索引的字段
analyze table my_table compute statistics for all indexed columns;
-- 指定索引
analyze table my_table compute statistics for all indexes;
-- 刪除分析數(shù)據(jù)
-- 行移動
-- 更改分區(qū)表的分區(qū)鍵值,意味著要刪除記錄并重新插入一條 新的記錄,這會引起記錄(Record)的移動,記錄的Rowid會改變,相關索引需要進行維護
select 'alter table ?' || t.TABLE_NAME || ' enable row movement;'
? from user_tables t
-- 權限
-- procedures創(chuàng)建運行權限
GRANT CREATE ANY PROCEDURE TO MONKEY; ?-- 創(chuàng)建,查看,替換的權限
GRANT EXECUTE ANY PROCEDURE TO MONKEY; ?-- 執(zhí)行和查看的權限
GRANT ALTER ANY PROCEDURE TO MONKEY; ?-- 編譯的權限
GRANT DEBUG ANY PROCEDURE TO MONKEY; ?-- 查看和調(diào)試的權限
GRANT CREATE ANY TYPE TO cd_new_01;
GRANT EXECUTE ANY TYPE TO cd_new_01;
GRANT ALTER ANY TYPE TO cd_new_01;
-- 查自己的角色
select * from user_role_privs;
-- 查自己擁有哪些系統(tǒng)權限
select * from session_privs;
-- 查自己可以訪問對象的權限
select * ?from user_tab_privs;
-- 同義詞
-- 創(chuàng)建同義詞
GRANT CREATE SYNONYM TO cd_new_01;
GRANT CREATE ANY SYNONYM TO cd_new_01;
-- 批量創(chuàng)建同義詞
? select 'create or replace synonym ' || TABLE_NAME || ' for ' || OWNER || '.' ||
? ? ? ? ?TABLE_NAME || ' ;'
? ? from user_tab_privs
? ?group by OWNER, TABLE_NAME
? ?
-- 查看創(chuàng)建的別名
select * from user_synonyms t;
select * from all_synonyms t where t.OWNER = 'HUAIBEI_ODS_1';
-- 查詢無效對象
-- 刪除無效同義詞
SELECT A.OWNER,
? ? ? ?A.OBJECT_NAME,
? ? ? ?A.OBJECT_TYPE,
? ? ? ?A.CREATED,
? ? ? ?A.LAST_DDL_TIME,
? ? ? ?A.STATUS,
? ? ? ?A.TIMESTAMP,
? ? ? ?SYSDATE AS "查詢時間",
? ? ? ?'drop synonym ' || OWNER || '.' || OBJECT_NAME || ';' as ddl_sql
? FROM DBA_OBJECTS a
?WHERE A.STATUS = 'INVALID'
? ?and owner = 'TONGGUANQU_ODS_1'
? ?
? ?
-- 刪除同義詞
? ? select 'drop synonym ' || TABLE_NAME || ';'
? ? ? from user_tab_privs tt
? ? ?where tt.TABLE_NAME like '%TEMP%'
? ? ?group by TABLE_NAME
select 'drop synonym TONGGUANQU_ODS_1.' || SYNONYM_NAME || ';'
? from dba_synonyms t
?where not exists
?(select 1 from dim_objects t1 where t.TABLE_NAME = t1.objects_name)
? ?and t.OWNER = 'TONGGUANQU_ODS_1';
? ?
/*
oracle plsql 上對package 包執(zhí)行重新編譯時,超時無響應:(4021)time-out occurred while waiting to lock object
(1)存儲過程編譯沒完成,或者編譯失敗時,oracle 數(shù)據(jù)庫會自動把相應的存儲過程鎖起來;
(2)DBA_DDL_LOCKS視圖中記錄存儲過程、表結構、視圖、包等數(shù)據(jù)庫對象鎖的信息;
(3)V$ACCESS視圖顯示數(shù)據(jù)庫中當前鎖定的對象及訪問它們的會話 。
*/
-- https://www.cnblogs.com/wsn-only/p/11196444.html
-- 查詢鎖定的包對應的SID號
select * from v$access t where t.OWNER = 'AH_SJPT_CDM';
select * from dba_ddl_locks t1 where t1.name = 'PKG_JTYS';
-- 根據(jù)SID查出會話信息
select SID, SERIAL# from v$session where sid in ('7503');
alter system kill session '7503,55467'
? ?
-- RMAN mount狀態(tài)或歸檔模式 ? 下運行
> rman target sys/oracle@10.10.27.120:1521/
RMAN> backup database format 'c:\data\bak_%U'; ? ? ? ? ? ? ?-- #全庫備份
RMAN> backup tablespace feidong_ods format 'c:\data\bak_ts_%U'; ? ? -- #指定表空間
RMAN> backup current controlfile format 'c:\data\bak_cf_%U'; ? ? ?-- #備份控制文件
RMAN> configure controlfile autoautobackup off|on; ? ? ? ? ? ? -- #控制文件自動備份設置
RMAN> list backup of database; ? ? ? ? ? ? ? ? ? ? ?-- #查看全庫備份 list:列出備份信息
RMAN> list backup of tablespace feidong_ods; ? ? ? ? ? ? ?-- #查看關于指定表空間的備份
RMAN> list backup of controlfile; ? ? ? ? ? ? ? ? ? -- #查看控制文件備份
RMAN> delete backupset 1; ? ? ? ? ? ? ? ? ? ? ? -- #刪除備份 noprompt不提示 刪除備份記錄及其物理文件
RMAN> delete backup; ? ? ? ? ? ? ? ? ? ? ? ? ? -- #刪除所有備份
RMAN> delete obsolete; ? ? ? ? ? ? ? ? ? ? ? ? ?-- #刪除過期備份
RMAN> delete expired backup; ? ? ? ? ? ? ? ? ? ? ?-- #刪除無效備份
RMAN> report need backup; ? ? ? ? ? ? ? ? ? ? ? -- #顯示需要備份的文件
RMAN> report need backup tablespace feidong_ods; ? ? ? ? ? ? -- #檢測指定表空間是否需要備份
RMAN> report obsolete; ? ? ? ? ? ? ? ? ? ? ? ? ?-- #查看過期備份
RMAN>
RMAN>
RMAN>
RMAN>
RMAN>show all; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 顯示recovery manager默認配置
/u01/app/oracle/product/12.2.0.1/db_1/dbs/ ? ? ? ?-- 實例初始化參數(shù)文件
cd /u01/app/oracle/product/12.2.0.1/db_1/dbs/
cp init.ora initcdb1.ora
common user ? ? ? ? ? -- 通用用戶 ? ?以c##開頭 ?
local user ? ? ? ? ? ?-- ?本地用戶 ? ?在pdb中創(chuàng)建的用戶
? ? -- 每個pdb都是一個獨立的單元,有自己的local user、表空間、數(shù)據(jù)文件,每個local user用戶只能訪問自己的pdb
-- 添加監(jiān)聽程序的參數(shù)()
vim /u01/app/oracle/product/12.2.0.1/db_1/network/admin/sqlnet.ora
? ? SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
? ? SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
-- awr報告
exec dbms_workload_repository.create_snapshot();
-- 隔幾分鐘后再執(zhí)行一次,生成倆快照。
-- 這個間隔時間越長約好,越能說明問題。
sqlplus / as sysdba
@?/rdbms/admin/awrrpt.sql
-- oracle高水位回收
-- 查看表實際使用的數(shù)據(jù)塊數(shù)
SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) ||
? ? ? ? ? ? ?DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) ZS
? FROM OT_JBGW_PERSON;
?
alter table OT_JBGW_PERSON enable row movement;
alter table OT_JBGW_PERSON shrink space; --ORA-10631:SHRINK clause should not be specified for this object SOLUTION:
-- 該錯誤是由于您要收縮的對象上具有“基于函數(shù)”的索引而導致的。具有基于函數(shù)的索引的對象不能縮小。要回收空間,您需要在縮小對象*之后刪除并讀取基于函數(shù)的索引。
alter table OT_JBGW_PERSON disable row movement;
begin
for i in (SELECT obj.owner
,obj.table_name
,(CASE WHEN NVL(idx.cnt, 0) < 1 THEN 'Y' ELSE 'N' END) as shrinkable
FROM dba_tables obj,
(SELECT table_name, COUNT(rownum) cnt
FROM dba_indexes
WHERE index_type LIKE ‘FUN%’
GROUP BY table_name) idx
WHERE obj.table_name = idx.table_name(+)
AND obj.tablespace_name = upper(‘&1’) and NVL(idx.cnt,0) < 1)
loop
execute immediate ‘a(chǎn)lter table ‘||i.owner||’.’||i.table_name||’ enable row movement’;
execute immediate ‘a(chǎn)lter table ‘||i.owner||’.’||i.table_name||’ shrink space’;
execute immediate ‘a(chǎn)lter table ‘||i.owner||’.’||i.table_name||’ disable row movement’;
end loop;
end;
-- ####### ?創(chuàng)建用戶 CRATE USER ?######
CREATE USER user_name IDENTIFIED BY password
[DEFAULT TABLESPACE default_tablespace | TEMPORARY TABLESPACE temp_tablespace]
PROFILE profile
QUOTA [intager K|M] | PASSWORD EXPIRE
ACCOUNT LOCK|UNLOCK
-- 指定默認表空間 指定默認臨時表空間 指定用戶資源文件 指定配額選項默認無限制 將密碼置為過期登錄時必須修改 鎖定或解鎖賬號
-- ####### ?修改用戶 ALTER USER ######
ALTER USER user_name IDENTIFIED BY password
[DEFAULT TABLESPACE default_tablespace | TEMPORARY TABLESPACE temp_tablespace]
PROFILE profile
QUOTA [intager K|M] | PASSWORD EXPIRE
ACCOUNT LOCK|UNLOCK
-- 修改用戶密碼
ALTER USER user_name IDENTIFIED BY password;
GRANT CONNECT TO user_name IDENTIFIED BY password;
-- ###### 刪除用戶 DROP USER ######
DROP USER user_name [CASCADE]
-- 用戶在數(shù)據(jù)庫中創(chuàng)建了對象,必須指定cascade參數(shù),將用戶在數(shù)據(jù)庫中創(chuàng)建的對象全部刪除。被刪除的用戶不能處于連接的狀態(tài)
-- ##### 管理用戶會話 #####
-- 1、使用字典視圖監(jiān)視用戶會話信息
select sid,serial#,username,status,logon_time,machine
? ? from v$session
? ? where username is not null;
-- 2、終止用戶會話
alter system kill session 'SID,SERIAL#';
alter system kill session '8713,6928';
-- SID和SERIAL#能夠標識唯一會話信息
-- ############## 權限 ##############
-- 系統(tǒng)權限
-- 1、oracle中的系統(tǒng)權限
-- ?對整個oracle系統(tǒng)的操作權限 ? ?連接數(shù)據(jù)庫、創(chuàng)建管理表或視圖
-- ?系統(tǒng)權限一般由數(shù)據(jù)庫管理員賦予用戶,并允許用戶將被授予的權限賦予其它用戶
select * from system_privilege_map; ? ? ? ? ? -- 查看全部系統(tǒng)權限列表
-- 2、授予系統(tǒng)權限
-- ?一般授予權限由DBA完成的。其它用戶必須有 CREATE ANY PRIVILEGE 系統(tǒng)權限
GRANT SYSTEM_PRIV [system_priv,...] TO {PUBLIC|role|user} [,{PUBLIC|role|user}]
[WITH ADMIN OPTION];
-- SYSTEM_PRIV指定系統(tǒng)權限,多個權限之間用逗號分隔 ?public全部用戶 role角色 user指定用戶 ?
-- 3、顯示系統(tǒng)權限
select * from dba_sys_privs where grantee='TEST'; ? ? ? ? ? ? ? ? -- 檢索某個用戶或角色擁有的系統(tǒng)權限
SELECT * FROM DBA_SYS_PRIVS T WHERE T.PRIVILEGE = 'CREATE TABLE' ?-- 檢索某項權限分布的用戶
select * from system_privilege_map;
select * from session_privs; ? ? ? ? ? ? ? ? ? ? ? ? ?-- 查看當前用戶擁有的系統(tǒng)權限
select * from user_role_privs; ? ? ? ? ? ? ? ? ? ? ? ? ?-- 查看當前用戶擁有的角色
-- ?4、回收系統(tǒng)權限
REVOKE SYSTEM_PRIV[,SYSTEM_PRIV] FROM {PUBLIC | ROLE | USER} [,{user|role|public}]
revoke create table from show; ? ? ? ? ? ? ? ? ? ? ? ?-- 回收來自show用戶的建表權限
-- 對象權限
-- 1、對象權限的分類
table ? ? ? ? alter delete ? ?index insert ? ? ?reference select update
view ? ? ? ? ? ?delete ? ? ? ? ? ?insert ? ? ? ? ? ?select update
dierctory ? ? ? ? ? ? ? ? ? rread
function ? ? ? ? ? ? execute
procedure ? ? ? ? ? ?execute
package ? ? ? ? ? ? ?execute
sequence ? ? ?alter ? ? ? ? ? ? ? ? ? ? ? ? ? select
-- 多種權限組合組合在一起可以用ALL權限,表示對該對象的全部權限
-- 2、授予對象權限
-- 對象權限是由對象的擁有者為其它用戶授權,非對象的擁有者不得向其它用戶 ,獲權用戶可以對對象進行相應操作
-- DBA用戶可以把任何對象權限授予其它用戶
GRANT object_privilege | ALL ON <schema.>object_name
TO {user_name | role_name | PUBLIC }
[WITH GRANT OPTION];
grant all on test.admisson_record_24h to show; ? ? ? ? ? ? ? ?-- 授予此表對象的所有對象權限
-- 3、顯示對象權限
select * from dba_tab_privs where grantee='SHOW'; ? ? ? ? ? ? -- 指定用戶或?qū)ο蟮娜繉ο髾嘞?/p>
-- 4、對象權限的回收
REVOKE {object_priv [,object_priv] | ALL }
ON [schema.]object
FROM {user|role|PUBLIC}
-- 授權者只能從自己授權的用戶哪里回收權限,被授權的用戶基于之前權限創(chuàng)建的 過程、視圖 將變?yōu)闊o效
-- 回收對象權限時,經(jīng)過傳遞獲得權限的用戶將會被影響
-- ########## ?角色 ?############
-- 將一組相關權限授予某個角色,一組權限的集合
-- 系統(tǒng)預定義角色
-- 1、CONNECT
? ALTER SESSION ? ? ? ? ? ? ?修改會話
? CREATE CLUSTER ? ? ? ? ? ? 建立聚簇
? CREATE DATABASE LINK ? ? ? 建立數(shù)據(jù)庫連接
? CREATE SEQUENCE ? ? ? ? ? ?建立序列
? CREATE SESSION ? ? ? ? ? ? 建立會話
? CREATE SYNONYM ? ? ? ? ? ? 建立同義詞
? CREATE VIEW ? ? ? ? ? ? ? ?建立視圖
? CREATE MATERIALIZED VIEW ? 物化視圖
? CREATE TABLE ? ? ? ? ? ? ? 建立表
? create procedure ? ? ? ? ? 建立存儲過程
----------------------------------------------- 控制用戶權限 -----------------------------------------------
---- 用戶的系統(tǒng)權限
-- 一般開發(fā)權限需求
create session
create table
create view
create sequence
create procedure
-- 創(chuàng)建表空間
create tablespace jreey datafile 'c:\data\jreey01.dbf' size 1G autoextend on next 100M;
create user jreey identified by jreey;
-- 指定用戶使用指定的表空間并限制使用容量 --限額
alter user jreey quota 100m on jreey;
-- 對容量使用不作限制 ?
alter user jreey quota unlimited on jreey;
-- 給予用戶建立會話的權限
grant create session to jreey;
-- 給予用戶建表權限
grant create table to jreey;
---- 角色
-- 創(chuàng)建角色
create role manager
-- 為角色添加權限
grant create session to manager;
grant create table, create view to manager;
-- 將角色賦予用戶
grant manager to jreey,tom;
-- 查看角色
select * from user_role_privs;
---- 對象權限
-- 不同的對象具有不同的對象權限
-- 對象的擁有者擁有全部權限
-- 對象的擁有者可以向外分配權限
-- 分配對象權限
grant select,update on employees to tom,jreey;
grant select,update on employees to public;
-- 使被授予用戶具有分配權限的權利
grant select on employees to jreey with grant option;
---- 收回對象權限
revoke select on employees from jreey;
-- 官方文檔
-- 數(shù)據(jù)庫存儲管理員指南 asm11g
https://docs.oracle.com/cd/B28359_01/server.111/b31107/preface.htm#OSTMG94043
http://10.110.0.129:9090/passport/
-- 創(chuàng)建用戶
create tablespace jxkh_bass datafile '+DATA/ORCL/DATAFILE/jxkh_bass01.dbf' size 100m autoextend on next 40m;
create user jxkh_bass identified by jxkh_bass default tablespace jxkh_bass;
grant connect to jxkh_bass;
grant create session to jxkh_bass;
grant create table to jxkh_bass;
grant create view to jxkh_bass;
grant create sequence to jxkh_bass;
grant create procedure to jxkh_bass;
grant create synonym to jxkh_bass;
alter user jxkh_bass quota unlimited on jxkh_bass;
-- 回收用戶
select sid,serial# from v$session where username='AH_ZHIKONG';
alter system kill session '11090,29827';
drop user ehr_dsq cascade;
-- DBMS_JOBS
-- 創(chuàng)建新的數(shù)據(jù)庫任務
declare
? job number;
BEGIN
? DBMS_JOB.SUBMIT(JOB ? ? ? => job, /*自動生成JOB_ID*/
? ? ? ? ? ? ? ? ? WHAT ? ? ?=> 'PR_CDM_DATE_GW;', /*需要執(zhí)行的存儲過程名稱或SQL語句*/
? ? ? ? ? ? ? ? ? NEXT_DATE => TRUNC(sysdate + 1) + 1 / 24, /*初次執(zhí)行時間-下一個3分鐘*/
? ? ? ? ? ? ? ? ? INTERVAL ?=> 'TRUNC(sysdate+1)+1/24' /*每隔1分鐘執(zhí)行一次*/);
? commit;
end;
declare
? v_sql varchar2(1000);
? cursor c_jobs is
? ? select job from user_jobs;
/*批量刪除jobs*/
begin
? for aa in c_jobs loop
? ? select 'begin
? dbms_job.remove(' || JOB || ');
end;'
? ? ? into v_sql
? ? ? from user_jobs
? ? ?where job = aa.job;
?
? ? execute immediate v_sql;
? end loop;
? commit;
end;
--
BEGIN
? DBMS_JOB.BROKEN(808, FALSE); ?-- 開啟job定時
? DBMS_JOB.BROKEN(808, TRUE); ? -- 關閉job定時
END;
BEGIN
DBMS_JOB.NEXT_DATE(813,TO_DATE('2022/04/06 10:00:00','yyyy-MM-dd hh24:mi:ss')); ?-- 修改下次執(zhí)行時間
END;
-- 手動sql調(diào)用job ? (直接調(diào)用job可以忽略開始時間)
begin
? DBMS_JOB.RUN(813); /*40 job的id*/
end;
?SYS.USER_JOBS is 'All jobs owned by this user';
?
?JOB is 'Identifier of job. ?Neither import/export nor repeated executions change it.'; -- 作業(yè)是作業(yè)的“標識符”。無論是導入/導出還是重復執(zhí)行都不會改變它。
?LOG_USER is 'USER who was logged in when the job was submitted'; ? -- LOG_USER是“提交作業(yè)時登錄的用戶”;
?PRIV_USER is 'USER whose default privileges apply to this job'; ?-- PRIV_USER是“默認權限適用于此作業(yè)的用戶”;
?SCHEMA_USER is 'select * from bar ?means ?select * from schema_user.bar '; ? -- SCHEMA_USER為“select*from bar”表示從SCHEMA_USER.bar中選擇*;
?LAST_DATE is 'Date that this job last successfully executed'; ?-- LAST_DATE是“此作業(yè)上次成功執(zhí)行的日期”;
?LAST_SEC is 'Same as LAST_DATE. ?This is when the last successful execution started.'; ? -- “最后一秒”與“最后一天”相同。這是最后一次成功執(zhí)行開始的時間?!?;
?THIS_DATE is 'Date that this job started executing (usually null if not executing)'; ? ? -- 此_日期是“此作業(yè)開始執(zhí)行的日期(如果未執(zhí)行,則通常為空)”;
?THIS_SEC is 'Same as THIS_DATE. ?This is when the last successful execution started.'; ? -- 本節(jié)與本節(jié)日期相同。這是最后一次成功執(zhí)行開始的時間?!埃?/p>
?NEXT_DATE is 'Date that this job will next be executed'; ? ? ? ? ? ? ? ? ?--- 下一個_日期是“下一次執(zhí)行此作業(yè)的日期”;
?NEXT_SEC is 'Same as NEXT_DATE. ?The job becomes due for execution at this time.'; ? ? -- 下一秒與下一個日期相同。此時該作業(yè)將到期執(zhí)行。“;
?TOTAL_TIME is 'Total wallclock time spent by the system on this job, in seconds'; ? ? ?-- TOTAL_TIME是“系統(tǒng)在此作業(yè)上花費的總掛鐘時間,以秒為單位”;
?BROKEN is 'If Y, no attempt is being made to run this job. ?See dbms_jobq.broken(job).'; -- Breaked是“如果是,則未嘗試運行此作業(yè)”。參見dbms_jobq.breaked(作業(yè))
?INTERVAL is 'A date function, evaluated at the start of execution, becomes next NEXT_DATE'; ?-- 間隔是“一個日期函數(shù),在執(zhí)行開始時計算,成為下一個_日期”;
?FAILURES is 'How many times has this job started and failed since its last success?'; ? ?-- FAILURES是“自上次成功以來,此作業(yè)啟動和失敗了多少次?”;
?WHAT is 'Body of the anonymous PL/SQL block that this job executes'; ? ? ? ? ? -- 什么是“此作業(yè)執(zhí)行的匿名PL/SQL塊體”;
?NLS_ENV is 'alter session parameters describing the NLS environment of the job'; ? ? -- NLS_ENV是“改變描述作業(yè)NLS環(huán)境的會話參數(shù)”;
?MISC_ENV is 'a versioned raw maintained by the kernel, for other session parameters'; ? ?-- MISC_ENV是“內(nèi)核維護的用于其他會話參數(shù)的版本化原始數(shù)據(jù)”;
?INSTANCE is 'Instance number restricted to run the job'; ?-- 實例是“限制運行作業(yè)的實例號”
?
?-- DBMS_job
dba_jobs ? ?表中字段含義:
JOB ? ? ? ? ? ? ? ? 任務的唯一標識碼
LOG_USER ? ? ? ? ?提交任務的用戶
PRIV_USER ? ? ? ? ? 賦予任務權限的用戶
SCHEMA_USER ? ? ? ? 對用戶作語法分析的用戶模式
LAST_DATE ? ? ? ? ? 最后一次成功執(zhí)行任務的時間
LAST_SEC ? ? ? ? ?最后一次成功執(zhí)行任務的時間的時分秒
THIS_DATE ? ? ? ? ? 正在執(zhí)行的任務的開始時間,若沒有則為空
THIS_SEC ? ? ?正在執(zhí)行的任務的開始時間的時分秒,若沒有則為空
NEXT_DATE ? ? ? 下一次執(zhí)行定時任務的時間
NEXT_SEC ? ? ?下一次執(zhí)行定時任務的時間的時分秒
TOTAL_TIME ? ? ?執(zhí)行當前任務所需要的時間,單位:秒
BROKEN ? ? ? ? ? ?標志參數(shù),Y表示任務中斷,以后不會再運行
INTERTAL ? ? ?計算下一次執(zhí)行定時任務的時間表達式
FAILURES ? ? ?當前定時任務執(zhí)行失敗的總次數(shù)
WHAT ? ? ? ?執(zhí)行任務的PL/SQL代碼塊
NLS_ENV ? ? ? 任務執(zhí)行的NLS會話設置
MISC_ENV ? ? ?定時任務運行的其他一些參數(shù)設置
INSTANCE ? ? ?標識當前任務運行是否受限,0 沒有受限
select t.JOB,
? ? ? ?t.LOG_USER,
? ? ? ?t.PRIV_USER,
? ? ? ?t.SCHEMA_USER,
? ? ? ?to_char(t.LAST_DATE, 'yyyy-mm-dd hh24:mi:ss') as "成功執(zhí)行時間",
? ? ? ?t.LAST_SEC as "成功執(zhí)行時分秒",
? ? ? ?to_char(t.THIS_DATE, 'yyyy-mm-dd hh24:mi:ss') as "正在執(zhí)行的任務的開始時間",
? ? ? ?t.THIS_SEC as "正在執(zhí)行時分秒",
? ? ? ?to_char(t.NEXT_DATE, 'yyyy-mm-dd hh24:mi:ss') as "下一次執(zhí)行任務時間",
? ? ? ?t.NEXT_SEC as "下一次時分秒",
? ? ? ?t.TOTAL_TIME,
? ? ? ?t.BROKEN as "任務有效性",
? ? ? ?t.INTERVAL,
? ? ? ?t.FAILURES as "失敗的總次數(shù)",
? ? ? ?t.WHAT,
? ? ? ?t.nls_env,
? ? ? ?t.MISC_ENV,
? ? ? ?t.INSTANCE
? from dba_jobs t
?
ora-28040
-- 沒有匹配的驗證協(xié)議
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
$ORACLE_HOME/network/admin/sqlnet.ora