備份還原

備份作用?
1、防止誤操作。
2、軟硬件故障,做恢復
3、防止天災。
備份的方式:物理備份和邏輯備份
備份的介質:磁盤,磁帶,光盤
集羣:數據守護 ,dsc(rac)
也支持第三方的備份軟件:上海愛數,鼎甲

物理備份

冷備和熱備
冷備:DMAP服務是打開的,數據庫實例是關閉的);
方式:

  1. 利用控制枱工具去備
  2. DMRMAN工具備份:
  • 冷備份,要停止數據庫,如果不停止造成數據丟失。
  • 熱備份(DMAP服務是打開的,數據庫實例是打開的,數據庫是歸檔模式)

開歸檔:命令方式:

SQL> alter database mount;
SQL> alter database add archivelog 'type=local,dest=/dm7/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
SQL> alter database open;
SQL> select name,status$,arch_mode from v$database;

利用管理工具去開歸檔

[dmdba@dca01 ~]$ disql sysdba/SYSDBA@localhost:5238
SQL> select name,status$,arch_mode from v$database;

命令行方式下全備,增量備(考試的時候建議用熱備)

# 全備:
SQL> backup database full backupset '/dm7/backup/full_bak';

# 增量備:
SQL> backup database increment backupset '/dm7/backup/incr_bak';

3、利用管理工具作熱備

還原:
模擬表空間損壞:

[dmdba@dca01 DAMENG]$ mv tbs1_02.dbf tbs1_02.dbf.bak
# 重啓服務
# 數據庫處於mount狀態,手動open
SQL> restore tablespace tbs1 from backupset '/dm7/backup/full_bak/';
SQL> alter database open;
SQL> alter tablespace tbs1 online;

邏輯備份

導入導出(DIMP,DEXP)分為四種級別:
數據庫級別,用户級別,模式級別和表級別,四種級別獨立互斥,不能同時存在,四種級別提供的功能:

  1. 數據庫級別:導出或導入整個數據庫的訪問對象。
  2. 用户:導入或導出一個或多個用户所擁有的所有對象。
  3. 模式:導入或導出一個或多個模式下的所有對象。
  4. 表級:導出或導入一個或多個指定表或表分區。

1、邏輯導出

[dmdba@dca01 bin]$ ./dexp
sysdba/dameng123@localhost:5236 file=dexp01.dmp
log=dexp01.log directory=/dm7/backup/dexp full=y

2、導入:

[dmdba@dca01 bin]$ ./dimp sysdba/SYSDBA@localhost:5238 file=/dm7/backup/dexp/dexp01.dmp log=/dm7/backup/dexp/dimp02.log;

作業

定時去執行的一組任務

考試時儘量使用管理工具來做。命令多且繁雜。

定期去備份

  1. 創建代理環境(達夢會創建一個sysjob模式)
  2. 創建作業:
call SP_CREATE_JOB('JOB1',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('JOB1');

call SP_ADD_JOB_STEP('JOB1', 'JOB1', 5, '01000/dm7/backup/JOB', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB1', 'JOB1', 1, 2, 1, 64, 0, '22:00:00', NULL, '2020-02-19 14:48:01', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB1');

定時增量備份

call SP_CREATE_JOB('JOB2',1,0,'',0,0,'',0,'');

call SP_JOB_CONFIG_START('JOB2');

call SP_ADD_JOB_STEP('JOB2', 'JOB2', 5, '11000/dm7/backup/full_bak|/dm7/backup/JOB', 1, 2, 0, 0, NULL, 0);

call SP_ADD_JOB_SCHEDULE('JOB2', 'JOB2', 1, 2, 1, 63, 0, '22:00:00', NULL, '2020-02-19 14:53:32', NULL, '');

call SP_JOB_CONFIG_COMMIT('JOB2');

DM 開發

支持 C 、 C++ 、 Java、Python、PHP、Perl 進行開發

/** 定義一個 DM JDBC 驅動串 */
String jdbcStr = "dm.jdbc.driver.DmDriver";

/** DM url 連接串 */
String urlString = "jdbc:dm://ip:5236";

配置 ODBC (考試要考)

# 檢查是否安裝了 gcc
rpm -aq|grep gcc
yum -y install gcc

tar -xzvf unixODBC-2.3.0.tar.gz
cd ./unixODBC-2.3.0
# 配置ODBC
./ configure --enable-gui=no
# 編譯ODBC
make
make install

# 檢查是否裝好了
odbc_config --version
# 下面兩個,都是獲取控制文件的路徑
odbc_config --odbcini
odbcinst -j

# 配置 ODBC.ini 和 odbcinst.ini


# 測試ODBC
isql dm7

存儲過程

寫匿名塊

declare (可選項)

begin
  print("hello")
  end;
set serveroutput on
begin
for i in 1..5 loop
  print(i);
end loop;
end;
/
SQL> begin
2    for i in 1..5 loop
3        print(i);
4   end loop;
5   end;

案例 1:根據員工編號找其所在部門

CREATE PROCEDURE "TEST"."SNO"("BH" IN INT)
AS
  DEPT INT;
BEGIN
  SELECT DEPARTMENT_ID INTO DEPT FROM DMHR.EMPLOYEE WHERE EMPLOYEE_ID=BH;
  PRINT(DEPT);
END;

觸發器

BEGIN
  INSERT INTO TEST.T VALUE(:OLD.SALARY,NEW.SALARY)
END;