首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 進階管理問題與解答(三):SQL*Plus 選項、日期格式、Keep Pool、Patch 檢查與權限管理

     編輯:Oracle 資料庫基礎

參數調校與安全權限實務

49. 修改 Windows SQL*Plus 啟動選項

編輯 $ORACLE_HOME/sqlplus/admin/glogin.sql。

50. 修改預設日期格式

ALTER SESSION SET NLS_DATE_FORMAT='YYYYMMDDHH24MISS';
-- 或 init.ora 加入
NLS_DATE_FORMAT='YYYYMMDDHH24MISS'

51. 將小表放入 Keep Buffer Pool

ALTER TABLE XXX STORAGE (BUFFER_POOL KEEP);

52. 檢查 Patch 安裝狀況

查閱 ORAINVENTORY 目錄記錄。

53. SELECT 產生自動流水號

SELECT ROWNUM, COL FROM TABLE;

54. 查詢表所屬 Tablespace

SELECT TABLESPACE_NAME FROM USER_TABLES WHERE TABLE_NAME='TEST';
-- 或查 USER_TABLES 的 TABLESPACE_NAME 欄位
-- 或查 DBA_SEGMENTS

55. 快速建立備份表

CREATE TABLE NEW_TABLE AS (SELECT * FROM OLD_TABLE);

55b. SQL*Plus 中修改 Procedure

SELECT LINE, TRIM(TEXT) T FROM USER_SOURCE WHERE NAME='A' ORDER BY LINE;

56. 解除 Procedure 被鎖定

  1. ALTER SYSTEM KILL SESSION ... (先查 SID)
  2. 或重新編譯並改名

57. SQL Reference 是什麼?

Oracle 官方 SQL 語法參考手冊,含語法、函數等,官網文檔中心可下載。

58. 查看資料庫狀態

  • Unix: PS -EF | GREP ORA
  • Windows: 檢查服務是否啟動、能否連線

59. 修改表主鍵

ALTER TABLE AAA DROP CONSTRAINT AAA_KEY;
ALTER TABLE AAA ADD CONSTRAINT AAA_KEY PRIMARY KEY (A1,B1);

60. 調整資料檔大小

ALTER DATABASE DATAFILE '...' RESIZE ...;

手動縮減需確保檔案末端無資料,否則會報錯。

61. 查看正在執行的程序

SELECT * FROM V$SESSION;

62. 查詢 Tablespace 個數

SELECT * FROM DBA_TABLESPACES;

63. 修改用戶連線數上限

修改 INITSID.ORA 的 PROCESSES 參數並重啟。

64. 查詢記錄最後更新時間

使用 LOGMINER 分析歸檔日誌。

65. PL/SQL 讀寫作業系統檔案

使用 UTL_FILE 套件。

66. 插入包含 & 字元的資料

INSERT INTO A VALUES (TRANSLATE('AT{&}T','AT{}','AT'));

67. EXP 匯出加 WHERE 條件

EXP USER/PASS FILE=A.DMP TABLES=(BSEMPMS)
QUERY='"WHERE EMP_NO=\'S09394\'"'

68. 8i 字元集支援簡繁體

ZHS16GBK 支援簡體中文。

69. Data Guard 是什麼?

Standby Database 的升級產品,提供災難復原與資料保護。

70. 建立 SPFILE

SQL> CONNECT / AS SYSDBA
SQL> CREATE SPFILE FROM PFILE='E:\ORA9I\ADMIN\EYGLE\PFILE\INIT.ORA';
SQL> CREATE SPFILE='E:\ORA9I\DATABASE\SPFILEEYGLE.ORA' FROM PFILE='...';

71. 核心參數設定指引 (Solaris 範例)

參數含義建議值
SHMMAX單一共享記憶體段最大值物理記憶體 50%
SHMMIN共享記憶體段最小值1
SHMMNI系統最大共享記憶體段數100
SHMSEG每進程最大附掛共享記憶體段數20
SEMMNI系統最大信號量集合數所有實例 PROCESSES 最大值 + 10
SEMMNS系統最大信號量總數Σ(其它實例 PROCESSES) + MAX_PROCESSES×2 + 10×實例數
SEMMSL單一信號量集合最大信號量數10 + 最大 PROCESSES

72. 查詢擁有 SYSDBA/SYSOPER 權限用戶

SELECT * FROM V_$PWFILE_USERS;

73. 單獨備份指定表

EXP USER/PASS TABLES=(TABLE1,TABLE2) FILE=EXP.DMP

74. 單獨備份指定用戶

EXP SYSTEM/MANAGER OWNER=(USER1,USER2) FILE=EXP.DMP

75. CLOB 全文檢索

SELECT * FROM A WHERE DBMS_LOB.INSTR(A.A,'K',1,1) > 0;

76. 顯示當前連線用戶

SHOW USER

77. 查詢資料檔路徑

COL FILE_NAME FORMAT A50
SELECT TABLESPACE_NAME, FILE_ID, BYTES/1024/1024, FILE_NAME
FROM DBA_DATA_FILES ORDER BY FILE_ID;

78. 查看回滾段狀態

COL SEGMENT FORMAT A30
SELECT SEGMENT_NAME, OWNER, TABLESPACE_NAME, SEGMENT_ID, FILE_ID, STATUS
FROM DBA_ROLLBACK_SEGS;

79. 修改欄位 CHECK 約束範圍

ALTER TABLE XXX DROP CONSTRAINT CONSTRAINT_NAME;
ALTER TABLE XXX ADD CONSTRAINT CONSTRAINT_NAME CHECK(...);

80. 常用系統檔案視圖

V$DATABASE, V$DATAFILE, V$LOGFILE, V$CONTROLFILE, V$PARAMETER

81-82. 內/外部連接語法

-- 內連接
SELECT A.* FROM BSEMPMS A, BSDPTMS B WHERE A.DPT_NO = B.DPT_NO;
-- 外連接 (Oracle 舊語法)
SELECT A.* FROM BSEMPMS A, BSDPTMS B WHERE A.DPT_NO = B.DPT_NO(+);
SELECT A.* FROM BSEMPMS A, BSDPTMS B WHERE A.DPT_NO(+) = B.DPT_NO;

83. 執行 SQL 腳本檔

SQL> @$PATH/FILENAME.SQL

84. 快速清空大表

TRUNCATE TABLE TABLE_NAME;

85. 查詢實例個數

SELECT * FROM V$INSTANCE;

86. 查詢資料庫表總數

SELECT * FROM ALL_TABLES;

87. 測試 SQL 執行時間

SET TIMING ON;
SELECT * FROM TABLENAME;

88. CHR() 反函數

ASCII()
SELECT CHR(65) FROM DUAL;  -- 'A'
SELECT ASCII('A') FROM DUAL; -- 65

89. 字串串接

SELECT CONCAT(COL1,COL2) FROM TABLE;
SELECT COL1 || COL2 FROM TABLE;

90. 查詢結果導出文字檔

SPOOL C:\ABCD.TXT
SELECT * FROM TABLE;
SPOOL OFF

91. 估算 SQL I/O 成本

SET AUTOTRACE ON;
SELECT * FROM TABLE;
-- 或查 V$FILESTAT

92. 修改欄位長度

ALTER TABLE TABLE_NAME MODIFY (FIELD_NAME VARCHAR2(100));
-- 只能加大,縮小需欄位全為 NULL

93. 查詢某日資料

SELECT * FROM TABLE_NAME
WHERE TRUNC(日期欄位) = TO_DATE('2003-05-02','YYYY-MM-DD');

94. SQL 插入全年日期

CREATE TABLE BSYEAR (D DATE);
INSERT INTO BSYEAR
SELECT TO_DATE('20030101','YYYYMMDD') + ROWNUM - 1
FROM ALL_OBJECTS
WHERE ROWNUM <= TO_CHAR(TO_DATE('20031231','YYYYMMDD'),'DDD');

95. 修改表名

ALTER TABLE OLD_TABLE_NAME RENAME TO NEW_TABLE_NAME;

96. 取得命令返回狀態

SQLCODE = 0 表示成功

97. 查詢用戶權限

SELECT * FROM DBA_SYS_PRIVS;

98. 下載版與商業版差異

功能無差別,但下載版僅供開發測試,不可用於商業生產環境,否則構成侵權。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved