使用 SQL *Plus 管理 Oracle 數據庫

SQL *Plus 是基於命令行的 Oracle 管理工具,能夠用來執行 SQLPL/SQL、 和 SQL*Plus 命令:html

  • 支持查詢、插入和更新數據node

  • 執行 PL/SQL 程序git

  • 查看錶和對象的定義github

  • 開發和執行批處理腳本sql

  • 進行數據庫管理數據庫

登陸 SQL *PLUS

直接登陸,輸入命令後會提示輸入用戶名密碼:oracle

$ sqlplus

使用用戶名和密碼:ide

$ sqlplus [username]/[user_password]

操做系統權限認證的 Oracle SYS 管理員登錄:工具

$ sqlplus / as sysdba

不在終端暴露密碼登陸:spa

$ sqlplus /nolog
SQL> conn [username]/[user_password]
# 或者
SQL > conn / as sysdba

退出登陸:

SQL> exit

數據庫信息

查看數據庫名

一般狀況了咱們稱的 數據庫,並不只指物理的數據集合,而是物理數據、內存、操做系統進程的組合體。

SQL> select name from v$database;

查詢當前數據庫實例名

實例是訪問Oracle數據庫所需的一部分計算機內存和輔助處理後臺進程,是由進程和這些進程所使用的內存(SGA)所構成一個集合。

SQL> select instance_name from v$instance;

數據庫實例名用於對外部鏈接。在操做系統中要取得與數據庫的聯繫,必須使用數據庫實例名。好比咱們做開發,要鏈接數據庫,就得鏈接數據庫實例名,orcl 就爲數據庫實例名:

jdbc:oracle:thin:@localhost:1521:orcl

一個數據庫能夠有多個實例,在做數據庫服務集羣的時候能夠用到。

用戶管理

Oracle 使用 PROFILE 文件對用戶訪問資源的權限進行控制。

若不作特殊指定,建立用戶時用戶默認使用的 PROFILE 就是 DEFAULT

查看當前用戶:

SQL> show user

查看數據庫用戶:

SQL> select * from dba_users;

解鎖用戶

默認當密碼輸錯 10 次以後,用戶就會被鎖定:

ORA-28000: the account is locked

這個時候就須要管理員來解鎖:

$ sqlplus / as sysdba
SQL> alter user [username] account unlock;

有解鎖確定就有鎖定:

SQL> alter user [username] account lock;

密碼錯誤次數

固然,也能夠本身修改最大密碼錯誤次數,最大錯誤次數存儲在 dba_profiles 表中。

首先根據 username 查看用戶使用的 PROFILE

SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME='[username]'

而後根據 username 以及查詢到的 PROFILE 查看該用戶的最大密碼錯誤次數 FAILED_LOGIN_ATTEMPTS

SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';

將錯誤次數修改成無限次:

SQL> ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTSUNLIMITED;

密碼有效期

Oracle 11g 默認用戶每三個月(180 天)就要修改一次密碼,快到密碼過時時間就會提醒:

ORA-28002: the password will expire within 7 days

這裏一樣要先查找到 PROFILE 再查看用戶密碼剩餘過時時間:

SQL> SELECT * FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME='PASSWORD_LIFE_TIME';

修改密碼有效期(不受限):

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIMEUNLIMITED;

設置密碼過時:

SQL> alter user [username] password expire;

修改密碼

修改當前登陸用戶密碼:

SQL> password

修改某個用戶的密碼:

SQL> alter user [username] identified by [password];

表管理

Oracle 的表都是存儲在表空間裏面的。建立表以前須要先建立一個表空間。

查看用戶所擁有的表

查看用戶所擁有的表:

SQL> SELECT TABLE_NAME FROM USER_TABLES;

查看用戶可存取的表:

SQL> SELECT TABLE_NAME FROM ALL_TABLES;

數據庫中全部表:

SQL> SELECT TABLE_NAME FROM DBA_TABLES;

查看錶空間

查看錶空間詳細數據文件:

SQL> SELECT FILE_NAME,TABLESPACE_NAME from DBA_DATA_FILES;

建立表空間

create tablespace [表空間名稱]
datafile [表空間數據文件路徑 ]
size [表空間大小]
autoextend on;

例如:

SQL> create tablespace SoftwareManagement
  2  datafile '/data/oracle/oradata/orcl/SoftwareManagement.dbf'
  3  size 50m
  4  autoextend on;

建立新用戶

CREATE USER [用戶名]  
IDENTIFIED BY [密碼]  
DEFAULT TABLESPACE [表空間] (默認USERS)  
TEMPORARY TABLESPACE [臨時表空間] (默認TEMP)

例如:

SQL> create USER software
  2  identified by 123456
  3  default tablespace Softwaremanagement;

分配權限

SQL> GRANT CONNECT TO [username];  
SQL> GRANT RESOURCE TO [username];  
SQL> GRANT DBA TO [username];  -- DBA爲最高級權限,能夠建立數據庫、表等。

到這裏,數據庫中的表空間、用戶以及用戶權限都建立並分配好了,接下來用戶就能夠在本身的表空間中建立表,而後進行開發。

權限管理

在給用戶分配權限的時候,分配了 CONNECTRESOURCE 權限給用戶。這兩個權限究竟是什麼呢?

oracle中的權限

Oracle 中的權限分爲兩類:

  • 系統權限:系統規定用戶使用數據庫的權限,系統權限是對用戶而言。

  • 實體權限:某種權限的用戶對其餘用戶的表或視圖的存取權限,是針對表或者視圖而言。如 selectupdateinsertdeletealterindexall,其中 all 包含全部的實體權限。

系統權限分類

  • DBA:擁有所有特權,是系統最高權限,只有DBA才能夠建立數據庫結構。

  • RESOURCE:擁有resource權限的用戶只能夠建立實體,不能夠建立數據庫結構。

  • CONNECT:擁有connect權限的用戶只能夠登陸oracle,不能夠建立實體,不能夠建立數據庫結構。

建議:
對於普通用戶,授予 CONNECTRESOURCE 權限;
對於 DBA 管理用戶,授予 CONNECTRESOURCEDBA 權限。

導入導出

數據庫的導入導出也是一個很常見的需求。

導出

$ exp [username]/[password]@[orcl] file=./database.dmp  full=y
  • username 是數據庫用戶名

  • password 是數據庫用戶密碼

  • orcl 是數據庫實例名稱

  • file 後面的參數是導出的數據庫文件存放位置及文件名

  • full 其值爲 y 表示所有導出,默認爲 no

若是隻需導出某幾張表,能夠指定 tables 參數:tables='(tableName, tableName1)'

導入

$ imp [username]/[password]@[orcl] file=./database.dmp

和導出數據庫語法同樣,只是關鍵字不同。

執行 SQL 文件

執行 SQL 文件的方法有不少種。以下:

使用 SQL PLUS 命令

$ sqlplus [username]/password@[orcl] @path/file.name

或者遠程執行:

$ sqlplus [username]/password@server_IP/service_name @path/file.name

若是sql腳本文件比較複雜,包含了begin end語句,就會不斷顯示行號,解決辦法就是在 sql 腳本的最後用 / 符號結尾。

在 SQL PLUS 中執行

SQL>start file_path
SQL>@ file_path

其中 file_path 是文件路徑。


參考

本文同步於個人博客 https://github.com/nodejh/nodejh.github.io/issues/31

相關文章
相關標籤/搜索