Oracle數據庫學習

  1. 實現Oracle 數據庫的安裝
  2. 管理數據表
  3. 簡單存放數據
  4. 更新數據
  5. python接口

Oracle 數據庫安裝

安裝Oracle 11g.

主要參考網頁:Oracle 11g數據庫詳細安裝步驟圖解注意以管理員模式運行setup.exe
Oracle 11g 安裝在 D:\app\Sean\product 下
此外,參考了網址[Oracle 11g數據庫安裝及配置] (http://blog.csdn.net/u010784236/article/details/52072085) 用於數據表的後續配置,如添加表等。

卸載Oracle 11g.

Windows 平臺徹底卸載Oracle 11通常較爲麻煩,可以參考如下網址給出的步驟
如何徹底卸載oracle(http://jingyan.baidu.com/article/3c343ff70bb3ea0d3779632c.html):

因爲Oracle在Windows下的卸載有一些麻煩,如果不能完全卸載有可能影響將來的再次安裝,常規卸載方法是運行Oracle的自帶的卸載程序,可遺憾的是在卸載時總不能完全卸載,有時候是註冊表沒有處理乾淨,或者用專門的卸載工具纔可以,但是當再次安裝Oracle時,就會出現莫名其妙的問題,並且這種卸載方式比較麻煩,比較慢,下面介紹一種比較快並且能夠徹底卸載Oracle的方法。

  1. 關閉oracle所有的服務。可以在windows的服務管理器中關閉;(控制面板-管理工具-服務)
  2. 打開註冊表:在運行中regedit 打開路徑:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
    刪除該路徑下的所有以oracle開始的服務名稱,這個鍵是標識Oracle在windows下注冊的各種服務!

  3. 打開註冊表,找到路徑:
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE
    刪除該oracle目錄,該目錄下注冊着Oracle數據庫的軟件安裝信息。

  4. 刪除註冊的oracle事件日誌,打開註冊表
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
    刪除註冊表的以oracle開頭的所有項目。

  5. 刪除環境變量path中關於oracle的內容。
    鼠標右鍵右單擊“我的電腦屬性高級環境變量PATH 變量。
    刪除Oracle在該值中的內容。注意:path中記錄着一堆操作系統的目錄,在windows中各個目錄之間使用分號(; )隔開的,刪除時注意。
    建議:刪除PATH環境變量中關於Oracle的值時,將該值全部拷貝到文本編輯器中,找到對應的Oracle的值,刪除後,再拷貝修改的串,粘貼到PATH環境變量中,這樣相對而言比較安全。

  6. 重新啓動操作系統。
    以上1~5個步驟操作完畢後,重新啓動操作系統。

  7. 重啓操作系統後各種Oracle相關的進程都不會加載了。這時刪除Oracle_Home下的所有數據。(Oracle_Home指Oracle程序的安裝目錄)

  8. 刪除C:\Program Files下oracle目錄。
    (該目錄視Oracle安裝所在路徑而定)

  9. 刪除開始菜單下oracle項,如:
    C:\Documents and Settings\All Users\「開始」菜單\程序\Oracle - Ora10g
    如果不刪除開始菜單下的Oracle相關菜單目錄,沒關係,這個不影響再次安裝Oracle.當再次安裝Oracle時,該菜單會被替換。

至此,Windows平臺下Oracle就徹底卸載了。

安裝Oracle client

主要參考網頁: PL/SQL Developer連接本地Oracle 11g 64位數據庫,解壓後放在 目錄 D:\app\Sean\product 下
然後在解壓後的 D:\app\Sean\product\instantclient_11_2目錄下新建NETWORK\ADMIN目錄,在ADMIN目錄下新建tnsnames.ora文件,添加數據庫TNS

oracle
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = sean-PC)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

注意:tnsnames.ora文件也可以從Oracle數據庫HOME目錄的NETWORK\ADMIN目錄,還要把sqlnet.ora拷貝過來。然後確定HOST配置是否正確,如果HOST是主機名,需要把主機名後面的域名去掉

Oracle 數據庫管理操作

目的:主要通過在本地建立一些數據表,存放在研究中經常用到的數據,並且定期更新數據庫(約半年一次更新),不需要非常強大的SQL功能。

建立數據庫–>創建用戶和授予權限–>連接數據庫建立表格、操作表格

在完成Oracle軟件安裝後,DBA就應該對組織和管理數據庫負責任,其主要任務是:

  1. 啓動和關閉數據庫;
  2. 創建數據庫;
  3. 刪除數據庫;
  4. 調整初始化參數;
  5. 管理網絡。

對於數據庫的管理,必須要具有SYSDBA和SYSOPER的角色,纔有權啓動、關閉、運行數據庫。SYSDBA角色擁有SYS數據表的所有權限,SYSOPER的角色擁有Public數據表的所有權限。

1. 新建數據庫|刪除數據庫

主要通過DBCA完成,主要參考博客 Oracle數據庫管理(一):創建和刪除數據庫
注意字符集選擇 UTF8
注意創建數據庫之後,需要修改目錄 D:\app\Sean\instantclient_11_2\NETWORK\ADMIN 下的tnsnames.ora 文件將新的數據庫添加到PL/SQL登錄的備選數據庫中,此處以CSMAR爲例。

CSMAR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SSID = CSMAR)
      (SERVICE_NAME = CSMAR)
    )
  )

刪除數據庫的時候,除了按照DBCA的步驟之外,還需要刪除註冊表和一些其他數據,例如刪除了數據庫CSMAR,本機的一些路徑設定如下:

  • $ORACLE_SID = CSMAR
  • $ORACLE_BASE = D:\app\Sean
  • $ORACLE_HOME = D:\app\Sean\product\11.2.0\dbhome_2

此時需要手工刪除實例相關的配置:

  1. 刪除ORACLEBASE/admin/ ORACLE_SID所有目錄。
  2. 刪除$ORACLE_HOME/dbs下和SID相關的文件和參數文件,包括hc_CSMAR.dat,init.ora,lkBISAL,orapwbisal。

2. PL/SQL 創建用戶、授予權限等

  • Step 1. 以system 賬號登錄數據庫CSMAR,
  • Step 2. 文件–新建–用戶,並給用戶搭配相應的權限,參考了這裏。新建了一個用戶,表空間在Users,角色爲connect,系統權限包括create session,以及對錶格的操作,表空間中不受限額。

點擊應用後,即可生成用戶,還可以查看對應的SQL代碼如下:

-- Create the user
create user SEAN
  identified by 123456
  default tablespace USERS
  temporary tablespace TEMP
  profile DEFAULT
  password expire
  quota unlimited on users;
-- Grant/Revoke role privileges
grant connect to SEAN;
grant dba to SEAN with admin option;
-- Grant/Revoke system privileges
grant create session to SEAN with admin option;
grant create table to SEAN with admin option;
grant delete any table to SEAN with admin option;
grant insert any table to SEAN with admin option;
grant select any table to SEAN with admin option;
grant unlimited tablespace to SEAN with admin option;
grant update any table to SEAN with admin option;

新建完成之後,點擊鑰匙(也就是登錄按鈕),然後切換成新的用戶進行登錄。

在創建數據庫時,已經爲SYS等4個賬戶設定了口令,其中SYS與SYSTEM具有管理員權限,在SQL*Plus工具中使用SYSTEM賬戶登錄Oracle數據庫。

通過數據字典dba_users,查看Oracle賬戶的鎖定狀態,如下:(v其中,OPEN表示賬戶爲解鎖狀態;EXPIRED表示賬戶爲過期狀態(需要設置口令才能解除此狀態);LOCKED表示賬戶爲鎖定狀態。)

使用ALTER USER語句爲scott賬戶解鎖:

SQL> ALTER USER scott ACCOUNT UNLOCK;

再使用ALTER USER語句爲scott賬戶設置口令,如下:

    SQL> ALTER USER scott IDENTIFIED BY tiger;

通過數據字典dba_users查看現在scott賬戶的狀態,通過查詢結果可以看出,scott賬戶已經被成功解鎖。在使用數據字典dba_users時,需要注意其字段的值是區分大小的。

給用戶解鎖

3. 新建數據表

通過PL/SQL完成

1. Oracle 中支持的數據類型有:

  1. 字符數據類型

    • CHAR 類型。
    • VHARCHAR2和VARCHAR類型
    • VARCHAR數據類型
    • NVARCHAR和NVARCHAR2類型
    • Long 類型
  2. 數值類型

    • NUMBER類型
  3. 浮點數類型

    • BINARY_FLOAT
    • BINARY_DOUBLE
  4. 日期和時間類型

    • DATE類型
    • TIMESTAMP類型
  5. 大對象類型

    • BLOB類型
    • BFILE類型

詳細介紹可以參考:簡書:Oracle數據庫數據類型oracle數據類型

2. Issue 新建表格 comment中中文亂碼

參考這裏解決: PLSQL Developer建表時註釋(COMMENT)中文亂碼的解決方案(Windows)

處理方法:在環境變量中新增以下變量值對:

  • 變量名:NLS_LANG
  • 變量值:AMERICAN_AMERICA.ZHS16GBK

暫時沒有解決,猜測仍然是字符集選擇問題,database character set 選擇了WE8MSWIN1252 似乎這是英文的字符集,會產生中文亂碼,考慮更改字符集

解決
在建立表格的時候就選UTF8 編碼或者中文編碼。

新建日曆文件表格

-- Create table
create table TRD_CALE
(
  markettype NUMBER,
  clddt      DATE,
  daywk      NUMBER,
  state      VARCHAR2(10)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns
comment on column TRD_CALE.markettype
  is '市場類型,1=上海A,2=上海B,4=深圳A,8=深圳B, 16=創業板';
comment on column TRD_CALE.clddt
  is '日曆日期,以YYYY-MM-DD表示';
comment on column TRD_CALE.daywk
  is '星期,1=星期一,2=星期二,3=星期三,4=星期四,5=星期五 6=星期六,0=星期天';
comment on column TRD_CALE.state
  is '開始情況,‘O’=開市(Open),‘C’=休市(Close)';

4. 批量插入數據

從外部數據格式中導入數據,例如excel, csv, dbf甚至SAS, Stata等格式的數據等。

參考這裏:教你Excel數據通過plsql導入到Oracle
注意,在設定“每次提交”時選擇0,這樣會把所有都提交。

2. 從python接入數據庫

Required python packages: cx_Oracle. 代碼文件參考: Github地址

# -*- coding: utf-8 -*-

# test for conneted to Oracle 11g database.
import cx_Oracle as ora

usr = "system"
psw = "123456"
host = "localhost"
port = 1521
sid = "csmar"

dsn = ora.makedsn(host, port, sid)  # define the destination to Oracle database.
con = ora.connect(usr, psw, dsn)   # connected to Oracle database.


con = ora.connect("system", "123456", "localhost/csmar")
print(con.version)
con.close

未完待繼續添加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章