❶ 達夢資料庫 如何使用sql語句查詢,資料庫容量大小和資料庫使用量大小
SELECT sum(df.TOTAL_SIZE) - sum(df.FREE_SIZE) as used ,
sum(df.TOTAL_SIZE) as total,
sum(df.FREE_SIZE) as free
FROM "SYS".V$TABLESPACE AS ts, "SYS".V$DATAFILE AS df WHERE ts.ID = df.GROUP_ID;
❷ 達夢資料庫varchar改為number報錯
~
關注
達夢資料庫常見報錯及解決辦法 原創
2021-09-13 16:53:28
果味怪叔叔~
碼齡3年
關注
在達夢資料庫的日常使用中我們可能會遇到很多問題,今天我將自己近期常遇到的錯誤進行總結匯總。
1、連接資料庫報錯:網路通信梁型異常
解決方法:
資料庫連接報網路通信異常原因通常只有兩個,資料庫服務啟動異常或者資料庫伺服器網路通信異常
1. 登錄資料庫伺服器檢查資料庫進程是否存在ps –ef|grep dmserver
2. 檢查資料庫伺服器網路通信ping資料庫伺服器地址
3. 檢查資料庫伺服器數據段渣銀庫埠號通信是否正常telnet資料庫伺服器ip資料庫埠號
2、資料庫啟動報錯:dmserver startup failed, code = -104 [Invalid INI file]
解決方法:
資料庫正常啟動需要有數據文件,該類報錯一般存在如下兩方面原因:
1)數據文件不存在;
2)啟動資料庫的用戶沒有讀寫數據文件的許可權。
3、資料庫連接報錯:用戶名或密碼錯誤
解決方法:
此類錯誤只需輸入正確的密碼即可。
如果忘記密碼,以管理員登錄資料庫後修改該用戶的密碼:
alter user USERNAME identified by 「PASSWD」
前面的USERNAME是用戶名,後面的PASSWD是密碼。
需要注意用戶名不區分大小寫,密碼區分大小寫。
4、登錄資料庫時報錯「用戶已被鎖」
解決方法:
使用SYSDBA登錄到資料庫後,滑鼠右鍵在對應「登錄」名上單擊「解鎖」,此時「登錄名」上的小鎖符號消失;
或使用SYSDBA登錄後手動調用存儲過程call SP_UNLOCK_LOGIN(『登錄名『)解鎖;
通常是用戶多次嘗試登錄但密碼錯誤導致,有時候應用系統配置了資料庫連接池,應用啟動時初始化連接池會多次連接資料庫,如用戶名密碼不對,則很快就會鎖住該用戶。
5、執行update,insert,delete語句完成後程序或其他資料庫連接查不到改變後的數據
解決方法:
造成此類現象的原因單條sql或者sql腳本執行完上述語句後沒有進行commit操作導致。
資料庫的執行單元是事務,事務如果沒有commit或者rollback,仍處於未完成狀態,根據事物ACID特性中的隔離性,其他資料庫連接無法看到未完成的資料庫事務對數據的改變
6、資料庫語句長時間不能執行完成,類似卡住的狀態
解決方法:
1)對於select等查詢語句,需要對sql語句進行分析優化,提升查詢效率
2)update,insert,delete語句執行慢可能的原因為資料庫阻塞導致,需要查握宴找出導致阻塞的語句,並對語句進行處理
7、執行語句報錯「字元串截斷」
解決方法:
修改的數據,超過了資料庫中字元類型(VARCHAR,CHAR)定義的長度,如VARCHAR(64),插入的數據位元組長度超過64就會報錯
8、執行語句報錯「數據溢出」
解決方法:
修改的數據,超過了資料庫中數值類型(int,number,decimal)定義的長度,如decimal(6,2),插入1000000,插入的數據超過定義的范圍就會報錯。
9、執行語句報錯 「不能修改或刪除聚集索引的列」或「試圖刪除聚集主鍵」
解決方法:
若想對有聚聚索引的列進行修改,可以重建表,或者重新在別的列上建立一個聚集索引。該列上的索引就變成非聚集了,就可以修改了。
很多時候是因為創建表時指定的主鍵被自動創建為聚集索引了,可以修改ini參數,將PK_WITH_CLUSTER設為0,則默認創建主鍵時為非聚集型。
❸ 達夢資料庫shell腳本怎麼獲取查詢語句結果集
方式一
當然是windows電腦安裝達夢管理工具,直接把腳本貼進去執行,但避免不了出現誤操作
在這里插入圖片描述
方式二
使用shell腳本執行sql
1. 先找到達夢資料庫安裝位置吧
[root@localhost ~]# ss -nlp |grep 5236
tcp LISTEN 0 128 [::]:5236 [::]:* users:(("dmserver",pid=103380,fd=4))
[root@localhost ~]# ps -ef|grep dmserver
root 85093 66993 0 17:56 pts/6 00:00:00 grep --color=auto dmserver
dmdba 103380 1 8 13:36 ? 00:23:18 /home/dmdba/dmdbms/bin/dmserver /home/dmdba/dmdbms/data/DAMENG_JW/dm.ini -noconsole
1
2
3
4
5
1
2
3
4
5
2. 直接在linux上執行shell命令執行sql腳本
2.1 # disql username/password:port
使用這個命令可以進入sql控制台
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
伺服器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 5.524(ms)
disql V8
SQL>
進入SQL>後:
直接輸入sql語句,使用英文分號結尾,回車執行。
使用「`sql文件路徑」,可以執行sql腳本文件,注意前面有一個小撇(esc和tab中間的鍵)
使用「start sql文件路徑」,可以執行sql腳本文件。
2.2 # disql username/password:port `sql文件位置
使用這個命令可以執行sql腳本
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236 \`sql/test.sql
[root@localhost sql]#
1
2
1
2
但需注意
這個腳本執行完sql會停留在sql執行行,如需執行完返回到shell命令行,則需要在sql文件結尾添加:exit; 。
這個shell語句不能用start執行sql文件,只能使用「`」,並且前面需要添加轉義字元「\」。
2.3 達夢sql腳本注意事項
目前發現-創建schema語句以及執行過程結尾,都需要添加「/」結束
例如執行以下語句,回車執行,一直在輸出數字,直到輸入「/」,再回車執行,才執行成功。
[root@localhost sql]# /home/dmdba/dmdbms/bin/disql cpuser/cpuser123:5236
伺服器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 6.121(ms)
disql V8
SQL> create schema test;
2
3 /
操作已執行
已用時間: 26.698(毫秒). 執行號:700604.
SQL>
sql腳本示例:
-- 創建schema
CREATE SCHEMA DB_ZFBA_MOBILE;
/
-- 執行過程
begin
if exists(select 1 from DBA_TAB_COLUMNS where OWNER='DB_ZFBA_MOBILE' AND TABLE_NAME='T_ZJTQD') then
EXECUTE immediate 'drop table DB_ZFBA_MOBILE.T_ZJTQD';
end if;
end;
/
create table DB_ZFBA_MOBILE.T_ZJTQD
(
"C_BH" char(32) NOT NULL, -- 主鍵
"C_BH_AJ" varchar2(32) NULL, -- 案件編號
……
"DT_ZHXGSJ" datetime NULL, -- 最後修改時間
constraint PK_T_ZJTQD primary key( C_BH )
);
sql文件結尾添加exit;,保證多個sql文件執行不會中斷
3. 編寫shell腳本
注意:shell腳本一定在linux中編寫,windows編寫的有些語句執行不成功(目前原因未知)
例如: a=a b=b c=$a$b echo $c 在windows下編寫,linux中執行完會輸出b
#!/bin/bash
# 請先配置資料庫連接信息,再執行此腳本
DM_PATH=/home/dmdba/dmdbms #達夢資料庫的安裝位置
USERNAME=cpuser #達夢資料庫連接用戶名
PASSWORD=cpuser123 #達夢資料庫連接密碼
PORT=5236 #達夢資料庫連接埠號
# 下面的信息請不要隨意修改
CONNECT_INFO=$USERNAME/$PASSWORD:$PORT
echo "連接信息:"$CONNECT_INFO
# STEP 1
echo "【開始執行】---- sql/02_創建資料庫對象/00.CS_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/00.CS_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/00.CS_GSYS.sql"
# STEP 2
echo "【開始執行】---- sql/02_創建資料庫對象/01.CT_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/01.CT_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/01.CT_GSYS.sql"
# STEP 3
echo "【開始執行】---- sql/02_創建資料庫對象/02.CC_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/02.CC_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/02.CC_GSYS.sql"
# STEP 4
echo "【開始執行】---- sql/02_創建資料庫對象/03.CI_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/02_創建資料庫對象/03.CI_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/02_創建資料庫對象/03.CI_GSYS.sql"
# STEP 5
echo "【開始執行】---- sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/03_初始化數據/02.I_T_Aty_CodeType_GSYS.sql"
# STEP 6
echo "【開始執行】---- sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql"
$DM_PATH/bin/disql $CONNECT_INFO \`sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql >> DB_DM.log
echo "【執行完成】---- sql/03_初始化數據/02.I_T_Aty_Code_GSYS.sql"
# Complete
echo "【SQL全部執行完成】---- 日誌請查看DB_DM.log"
執行完成後,通過shell控制台和DB_DM.log日誌可以分析sql腳本是否執行成功。
❹ 達夢資料庫DM遷移之導出sql腳本
原文地址: https://blog.csdn.net/corleone_4ever/article/details/105394414
利用達夢數據遷移工具即可
新建遷移
選擇SQL=====>DM,然後按照提示說明執行即可
❺ 達夢資料庫能使用pl/sql這個工具嗎如何連接
沒有什麼區別···都是語法····
你把begin
end
看做是
c裡面的
{
}
就行了···
比如
存儲過程當中
就是as
begin
但是他們中間是定義了變數的
as
declare
@id
int
begin
如果沒有變數
就直接as
begin
也有的寫
is
begin
plsql塊
可能是declare
定義了之後就直接是
begin
所以其實沒什麼太大區別
❻ 達夢資料庫怎麼寫shell腳本,怎麼通過shell腳本調用sql腳本
通過shell腳本調用sql腳本:
1、shell腳本調用sql腳本
#首先編輯sql文件
oracle@SZDB:~> more dept.sql
connect scott/tiger
spool /tmp/dept.lst
set linesize 100 pagesize 80
select * from dept;
spool off;
exit;
#編輯shell腳本文件,在shell腳本內調用sql腳本
oracle@SZDB:~> more get_dept.sh
#!/bin/bash
# set environment variable
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_SID=CNMMBO
sqlplus -S /nolog @/users/oracle/dept.sql #注意此處執行sql腳本的方法 -S 表示以靜默方式執行
exit
#授予腳本執行許可權
oracle@SZDB:~> chmod 775 get_dept.sh
-->執行shell腳本
oracle@SZDB:~> ./get_dept.sh
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
2、shell腳本調用rman腳本
#首先編輯RMAN腳本
oracle@SZDB:~> more rman.rcv
RUN {
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/users/oracle/bak/%d_%F';
ALLOCATE CHANNEL CH1 TYPE DISK MAXPIECESIZE=4G;
ALLOCATE CHANNEL CH2 TYPE DISK MAXPIECESIZE=4G;
SET LIMIT CHANNEL CH1 READRATE=10240;
SET LIMIT CHANNEL CH1 KBYTES=4096000;
SET LIMIT CHANNEL CH2 READRATE=10240;
SET LIMIT CHANNEL CH2 KBYTES=4096000;
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
BACKUP
DATABASE FORMAT '/users/oracle/bak/%d_FULL__%U';
SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
BACKUP ARCHIVELOG ALL FORMAT '/users/oracle/bak/%d_LF_%U' DELETE INPUT;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL CH1;
RELEASE CHANNEL CH2;
}
#編輯shell腳本文件,在shell腳本內調用rman腳本
oracle@SZDB:~> more rman_bak.sh
#!/bin/bash
# set environment variable
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
export ORACLE_SID=CNMMBO
$ORACLE_HOME/bin/rman target / cmdfile=/users/oracle/rman.rcv log=/users/oracle/bak/rman.log
exit
#授予腳本執行許可權
oracle@SZDB:~> chmod 775 rman_bak.sh
#執行shell腳本
❼ 達夢資料庫常見參數調整
下面是在命令行客戶端工具直接執行的腳本(執行後,會輸出待調整參數):
備註:第一次dminit後就要調整,獲取的是當前系統可用內存。
set serveroutput on
declare
v_maxsess bigint;
v_cpus bigint;
v_mem_mb bigint;
v_bufs bigint;
v_refs bigint;
v_maxdisk_mb bigint;
begin
-- manual set
v_maxsess=5000;
-- reload messages
v_cpus=64;
v_mem_mb=500000;
v_bufs=101;
v_refs=67;
v_maxdisk_mb=100000;
SELECT cast(67434610688*0.8/1024/1024 as int) into v_maxdisk_mb FROM V$SYSTEMINFO ORDER BY DRIVER_TOTAL_SIZE DESC ;
-- SELECT * FROM V$SYSTEMINFO ORDER BY DRIVER_TOTAL_SIZE DESC LIMIT 1 OFFSET 1;
SELECT case when N_CPU<8 then 8 3 when N_CPU<32 then N_CPU 2 else 64 end n_CPU,FREE_PHY_SIZE/1024/1024 MEM
into v_cpus,v_mem_mb FROM V$SYSTEMINFO LIMIT 1;
with a(val) as(select 5 union all
select 7 union all
select 11 union all
select 13 union all
select 17 union all
select 19 union all
select 23 union all
select 29 union all
select 31 union all
select 37 union all
select 41 union all
select 43 union all
select 47 union all
select 53 union all
select 59 union all
select 61 union all
select 67 union all
select 71 union all
select 73 union all
select 79 union all
select 83 union all
select 89 union all
select 97 union all
select 101),b as(
select rownum rn,val val from a)
select (
select VAL bufs from b where rn=( 3 + CAST( v_mem_mb/1024.0 1.0/2048 100 AS INT))) v_bufs,,(
select VAL refs from b where rn=( 3 + CAST( v_mem_mb/1024.0 1.0/2048 100 AS INT)) )v_refs into v_bufs,v_refs from al
;
print '
begin
SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'',100);
SP_SET_PARA_VALUE(2,''MEMORY_POOL'',cast( '||v_mem_mb||' 0.1 as int) );
SP_SET_PARA_VALUE(2,''MEMORY_TARGET'',cast ( '||v_mem_mb||' 0.2 as int) );
SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'',1);
SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'',cast( (0.37) '||v_mem_mb||' 1024 0.6/'||v_maxsess||' as int));
SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'',cast( (0.37) '||v_mem_mb||' 1024 0.3/'||v_maxsess||' as int ) );
SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'',cast( (0.37) '||v_mem_mb||' ('||v_maxsess||'/2000.0)*0.55 as int) );
SP_SET_PARA_VALUE(2,''BUFFER'',cast('||v_mem_mb||' * 0.5 as int));
SP_SET_PARA_VALUE(2,''MAX_BUFFER'',cast('||v_mem_mb||' * 0.5 as int));
SP_SET_PARA_VALUE(2,''RECYCLE'',10000*'||v_cpus||'/100);
SP_SET_PARA_VALUE(2,''BUFFER_POOLS'','||v_bufs||');
SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'','||v_refs||');
SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||');
SP_SET_PARA_VALUE(2,''TASK_THREADS'','||v_cpus||');
SP_SET_PARA_VALUE(2,''HJ_BUF_GLOBAL_SIZE'', cast('||v_mem_mb||' * 0.18 as int));
SP_SET_PARA_VALUE(2,''HJ_BUF_SIZE'', cast('||v_mem_mb||' * 0.0018 as int));
SP_SET_PARA_VALUE(2,''HAGR_BUF_GLOBAL_SIZE'',cast('||v_mem_mb||' * 0.12 as int));
SP_SET_PARA_VALUE(2,''HAGR_BUF_SIZE'', cast('||v_mem_mb||' * 0.0024 as int));
SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'','||v_refs||' 5);
SP_SET_PARA_VALUE(2,''TEMP_SIZE'',5000 '||v_mem_mb||'/1024.0/256);
SP_SET_PARA_VALUE(2,''VM_POOL_SIZE'','||v_refs||' 5);
SP_SET_PARA_VALUE(2,''SESS_POOL_SIZE'','||v_refs||' 5);
SP_SET_PARA_VALUE(2,''MAX_SESSIONS'','||v_maxsess||');
SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'','||v_maxsess||'*8);
SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0);
SP_SET_PARA_VALUE(2,''USE_PLN_POOL'',1);
SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2);
SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1);
SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1);
SP_SET_PARA_VALUE(2,''COMPATIBLE_MODE'',2);
SP_SET_PARA_VALUE(2,''MONITOR_TIME'',0);
SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'',1);
SP_SET_PARA_VALUE(2,''SVR_LOG'',0);
end;
'
print '
create tablespace "USER" datafile ''USER01.dbf'' size 200;'
--print '
--alter user SYSDBA default tablespace "USER";'
print '
sp_set_para_value(1,''PWD_POLICY'',0);'
print '
create user DMDBA identified by DMDBA default tablespace "USER";'
print '
GRANT DBA TO dmdba;'
print '
sp_set_para_value(1,''PWD_POLICY'',2);'
print '
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG ''DEST=/home/dmdba/dmdbms/arch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT='||cast(v_maxdisk_mb*0.1 as int)||'''
ALTER DATABASE OPEN;'
print '
sp_set_para_value(1,''BAK_USE_AP'',2);
BACKUP DATABASE FULL TO DMBAK_FULL_00 BACKUPSET ''DMBAK_FULL_00'' COMPRESSED;
'
exception
when others then
raise_application_error (-20001,substr( ' 執行失敗, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400));
end;
/