環境
win10 64位
Oracle Database 12c Release 2 (12.2.0.1.0)
1.下載
數據庫(包括客戶端)
Oracle Database 12c Release 2 (12.2.0.1.0) for Microsoft Windows (x64)
客戶端
Oracle Database 12c Release 2 Client (12.2.0.1.0) for Microsoft Windows (x64)
https://www.oracle.com/database/technologies/oracle12c-windows-downloads.html
2.安裝
安裝完成
Oracle Enterprise Manager Database Express URL: https://localhost:5500/em
按照步驟安裝好後,需要啓動監聽 lnsrctl start
#查看監聽
lnsrctl status
#關閉監聽
lnsrctl stop
#啓動監聽
lnsrctl start
修改監聽名
服務器中的listener.ora
客戶端配置
LOCALHOST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORCL)
)
)
啓動實例連接本地數據庫失敗
ORA-28547:連接服務器失敗,可能是Oracle Net管理錯誤
描述:監聽和服務都正常啓動了,但是遠程連接的時候會有這種錯誤
ORA-28547:連接服務器失敗,可能是Oracle Net管理錯誤
解決辦法:
listener.ora 文件中
DEFAULT_SERVICE_LISTENER= (ORCL)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl) #網絡上的服務名稱
(ORACLE_HOME =G:\oracle\product\10.2.0\db_1) # 這裏一定要配置正確
# (PROGRAM = extproc)
)
)
(PROGRAM = extproc) 把這句話註釋掉重啓監聽服務就好了。
extproc是一個擴展的程序調用接口協議, 連接和調用外部的操作系統程序或進程用時會用到。
3.默認用戶名密碼
創建數據庫時設置口令爲 rootA123 替換sys 默認密碼,遠程使用sys登陸時使用此密碼登陸。在本機使用sys登陸則不需要密碼
SYS用戶:超級管理員,權限最高,它的角色是DBA。默認密碼是change_on_install。具有創建數據庫的權限
SYSTEM用戶:系統管理員,權限很高,它的角色是DBA operator,默認密碼manager。不具有創建數據庫的權限!
普通用戶(normal),如系統安裝時的scott用戶,默認密碼是tiger。普通用戶的權限是SYS用戶或SYSTEM用戶給的,如果沒有給,那普通用戶連很基本的訪問權限,連接權限也沒有。以上說的默認密碼是9i時的默認密碼,10g時已經沒有默認密碼了。
使用PLSQL可以使用sys / as sysdba登陸
4.新增用戶
新建一個數據庫就可以和11g一樣直接創建用戶和密碼。如果使用12c的方式(容器數據庫)則需要加c##或C##爲用戶名前綴
create user scott identified by tiger;
grant connect,resource,dba to scott;
修改用戶密碼
-- 容器數據庫添加用戶 用戶名不區分大小寫,密碼區分大小寫
create user c##scott identified by tiger;
grant connect,resource,dba to c##scott;
-- 修改用戶密碼 alter user abc identified by 123456;//修改用戶名abc密碼123456
常用命令
一、查看用戶
1.查看所有用戶:
select * from dba_users;
select * from all_users;
select * from user_users; //查看當前用戶
二、查看角色
1.當前用戶被激活的全部角色
select * from session_roles;
2.當前當前用戶被授予的角色
select * from user_role_privs;
3.全部用戶被授予的角色
select * from dba_role_privs;
4、查看某個用戶所擁有的角色
select * from dba_role_privs where grantee='用戶名';
5、查看某個角色所擁有的權限
select * from dba_sys_privs where grantee='CONNECT';
6.查看所有角色
select * from dba_roles;
三、查看權限
1.基本權限查詢:
select * from session_privs; --當前用戶所擁有的全部權限
select * from user_sys_privs;--當前用戶的系統權限
select * from user_tab_privs;--當前用戶的對象權限
select * from dba_sys_privs ;--查詢某個用戶所擁有的系統權限
select * from role_sys_privs;--查看角色(只能查看登陸用戶擁有的角色)所包含的權限
2. 查看用戶的系統權限(直接賦值給用戶或角色的系統權限)
select * from dba_sys_privs;
select * from user_sys_privs;
2.查看用戶的對象權限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
3.查看哪些用戶有sysdba或sysoper系統權限(查詢時需要相應權限)
select * from v$pwfile_users;
擴展
1、以下語句可以查看Oracle提供的系統權限
select name from sys.system_privilege_map
2、查看一個用戶的所有系統權限(包含角色的系統權限)
select privilege from dba_sys_privs where grantee='SCOTT'
union
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='SCOTT' );
3、 查詢當前用戶可以訪問的所有數據字典視圖。
select * from dict where comments like '%grant%';
4、顯示當前數據庫的全稱
select * from global_name;
問題 1:如何查詢一個角色包括的權限?
a.一個角色包含的系統權限
select * from dba_sys_privs where grantee='角色名'
select * from dba_sya_privs where grantee='COONNECT'; connect要大寫
另外也可以這樣查看:
select * from role_sys_privs where role='角色名'
b.一個角色包含的對象權限
select * from dba_tab_privs where grantee='角色名'
問題 2:Oracle究竟有多少種角色?
select * from dba_roles;
問題 3:如何查看某個用戶,具有什麼樣的角色?
select * from dba_role_privs where grantee='用戶名'
問題4:查看哪些用戶具有DBA的角色
select grantee from dba_role_privs where granted_role='DBA';
PLSQL
變量設置
pl/sql環境變量設置
ORACLE_HOME=D:\oracle\product\10.2.0\db_1
TNS_ADMIN=D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK