oracle里存储函数将金额数字转换成大写

技术文章admin 发表了文章 • 0 个评论 • 74 次浏览 • 2018-04-30 16:47 • 来自相关话题

CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)  
  RETURN NVARCHAR2 IS  
  /*Ver:1.0 Created By xsb on 2003-8-18 For:  
  将金额数字(单位元)转换为大写(采用从低至高算法)  
  数字整数部分不得超过16位,可以是负数。  
  Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。  
  Ver:1.2 Modified By xsb on 2003-8-22 For:分后不带整字。  
  Ver:1.3 Modified By xsb on 2003-8-28 For:完善测试用例。  
  测试用例:  
  SET HEAD OFF  
  SET FEED OFF  
  select '无参数时='||NUMBER_TO_CHINESE() from dual;  
  select 'null='||NUMBER_TO_CHINESE(null) from dual;  
  select '0='||NUMBER_TO_CHINESE(0) from dual;  
  select '0.01='||NUMBER_TO_CHINESE(0.01) from dual;  
  select '0.126='||NUMBER_TO_CHINESE(0.126) from dual;  
  select '01.234='||NUMBER_TO_CHINESE(01.234) from dual;  
  select '10='||NUMBER_TO_CHINESE(10) from dual;  
  select '100.1='||NUMBER_TO_CHINESE(100.1) from dual;  
  select '100.01='||NUMBER_TO_CHINESE(100.01) from dual;  
  select '10000='||NUMBER_TO_CHINESE(10000) from dual;  
  select '10012.12='||NUMBER_TO_CHINESE(10012.12) from dual;  
  select '20000020.01='||NUMBER_TO_CHINESE(20000020.01) from dual;  
  select '3040506708.901='||NUMBER_TO_CHINESE(3040506708.901) from dual;  
  select '40005006078.001='||NUMBER_TO_CHINESE(40005006078.001) from dual;  
  select '-123456789.98='||NUMBER_TO_CHINESE(-123456789.98) from dual;  
  select '123456789123456789.89='||NUMBER_TO_CHINESE(123456789123456789.89) from dual;  
  test  
  */  
  RESULT      NVARCHAR2(100); --返回字符串  
  NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --转换数字为小数点后2位的字符(正数)  
  NUM_LEFT    NVARCHAR2(100); --小数点左边的数字  
  NUM_RIGHT   NVARCHAR2(2); --小数点右边的数字  
  STR1        NCHAR(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写  
  STR2        NCHAR(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)  
  NUM_PRE     NUMBER(1) := 1; --前一位上的数字  
  NUM_CURRENT NUMBER(1); --当前位上的数字  
  NUM_COUNT   NUMBER := 0; --当前数字位数  
  NUM1        NUMBER;  
  
BEGIN  
  IF P_NUM IS NULL THEN  
    RETURN NULL;  
  END IF; --转换数字为null时返回null  
  
  SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),  
                            1,  
                            DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                                   0,  
                                   LENGTH(NUM_ROUND),  
                                   INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),  
                     0))  
    INTO NUM_LEFT  
    FROM DUAL; --取得小数点左边的数字  
  SELECT SUBSTR(TO_CHAR(NUM_ROUND),  
                DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                       0,  
                       LENGTH(NUM_ROUND) + 1,  
                       INSTR(TO_CHAR(NUM_ROUND), '.') + 1),  
                2)  
    INTO NUM_RIGHT  
    FROM DUAL; --取得小数点右边的数字  
  SELECT CASE  
           WHEN LENGTH(NUM_LEFT) >= 8 THEN  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))  
           ELSE  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),  
                             -LENGTH(NUM_LEFT),  
                             LENGTH(NUM_LEFT) - 4))  
         END  
    INTO NUM1  
    FROM DUAL; ---取得千、百、十、万位上的数字  
  IF LENGTH(NUM_LEFT) > 16 THEN  
    RETURN '**********';  
  END IF; --数字整数部分超过16位时  
  
  --采用从低至高的算法,先处理小数点右边的数字  
  IF LENGTH(NUM_RIGHT) = 2 THEN  
    IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN  
      RESULT := '零' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    ELSE  
      RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    END IF;  
  ELSIF LENGTH(NUM_RIGHT) = 1 THEN  
    RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';  
  ELSE  
    RESULT := '整';  
  END IF;  
  --再处理小数点左边的数字  
  FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP  
    --(从低至高)  
    NUM_COUNT   := NUM_COUNT + 1; --当前数字位数  
    NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --当前位上的数字  
    IF NUM_CURRENT > 0 THEN  
      --当前位上数字不为0按正常处理  
      RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||  
                SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
    ELSE  
      --当前位上数字为0时  
      IF NUM_COUNT = 5 THEN  
        IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零 --当前位是元、万或亿时  
        END IF;  
      ELSE  
        IF MOD(NUM_COUNT - 1, 4) = 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零  
        END IF;  
      END IF;  
      IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN  
        --上一位数字不为0或只有个位时  
        RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;  
      END IF;  
    END IF;  
    NUM_PRE := NUM_CURRENT;  
  END LOOP;  
  
  IF P_NUM < 0 THEN  
    --转换数字是负数时  
    RESULT := '负' || RESULT;  
  END IF;  
  
  RETURN RESULT;  
  
EXCEPTION  
  WHEN OTHERS THEN  
    RAISE_APPLICATION_ERROR(-20001, '数字转换大写出现错误!' || SQLERRM);  
END;   查看全部
CREATE OR REPLACE FUNCTION NUMBER_TO_CHINESE(P_NUM IN NUMBER DEFAULT NULL)  
  RETURN NVARCHAR2 IS  
  /*Ver:1.0 Created By xsb on 2003-8-18 For:  
  将金额数字(单位元)转换为大写(采用从低至高算法)  
  数字整数部分不得超过16位,可以是负数。  
  Ver:1.1 Modified By xsb on 2003-8-20 For:个位数处理也放在For循环中。  
  Ver:1.2 Modified By xsb on 2003-8-22 For:分后不带整字。  
  Ver:1.3 Modified By xsb on 2003-8-28 For:完善测试用例。  
  测试用例:  
  SET HEAD OFF  
  SET FEED OFF  
  select '无参数时='||NUMBER_TO_CHINESE() from dual;  
  select 'null='||NUMBER_TO_CHINESE(null) from dual;  
  select '0='||NUMBER_TO_CHINESE(0) from dual;  
  select '0.01='||NUMBER_TO_CHINESE(0.01) from dual;  
  select '0.126='||NUMBER_TO_CHINESE(0.126) from dual;  
  select '01.234='||NUMBER_TO_CHINESE(01.234) from dual;  
  select '10='||NUMBER_TO_CHINESE(10) from dual;  
  select '100.1='||NUMBER_TO_CHINESE(100.1) from dual;  
  select '100.01='||NUMBER_TO_CHINESE(100.01) from dual;  
  select '10000='||NUMBER_TO_CHINESE(10000) from dual;  
  select '10012.12='||NUMBER_TO_CHINESE(10012.12) from dual;  
  select '20000020.01='||NUMBER_TO_CHINESE(20000020.01) from dual;  
  select '3040506708.901='||NUMBER_TO_CHINESE(3040506708.901) from dual;  
  select '40005006078.001='||NUMBER_TO_CHINESE(40005006078.001) from dual;  
  select '-123456789.98='||NUMBER_TO_CHINESE(-123456789.98) from dual;  
  select '123456789123456789.89='||NUMBER_TO_CHINESE(123456789123456789.89) from dual;  
  test  
  */  
  RESULT      NVARCHAR2(100); --返回字符串  
  NUM_ROUND   NVARCHAR2(100) := TO_CHAR(ABS(ROUND(P_NUM, 2))); --转换数字为小数点后2位的字符(正数)  
  NUM_LEFT    NVARCHAR2(100); --小数点左边的数字  
  NUM_RIGHT   NVARCHAR2(2); --小数点右边的数字  
  STR1        NCHAR(10) := '零壹贰叁肆伍陆柒捌玖'; --数字大写  
  STR2        NCHAR(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)  
  NUM_PRE     NUMBER(1) := 1; --前一位上的数字  
  NUM_CURRENT NUMBER(1); --当前位上的数字  
  NUM_COUNT   NUMBER := 0; --当前数字位数  
  NUM1        NUMBER;  
  
BEGIN  
  IF P_NUM IS NULL THEN  
    RETURN NULL;  
  END IF; --转换数字为null时返回null  
  
  SELECT TO_CHAR(NVL(SUBSTR(TO_CHAR(NUM_ROUND),  
                            1,  
                            DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                                   0,  
                                   LENGTH(NUM_ROUND),  
                                   INSTR(TO_CHAR(NUM_ROUND), '.') - 1)),  
                     0))  
    INTO NUM_LEFT  
    FROM DUAL; --取得小数点左边的数字  
  SELECT SUBSTR(TO_CHAR(NUM_ROUND),  
                DECODE(INSTR(TO_CHAR(NUM_ROUND), '.'),  
                       0,  
                       LENGTH(NUM_ROUND) + 1,  
                       INSTR(TO_CHAR(NUM_ROUND), '.') + 1),  
                2)  
    INTO NUM_RIGHT  
    FROM DUAL; --取得小数点右边的数字  
  SELECT CASE  
           WHEN LENGTH(NUM_LEFT) >= 8 THEN  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT), -8, 4))  
           ELSE  
            TO_NUMBER(SUBSTR(TO_CHAR(NUM_LEFT),  
                             -LENGTH(NUM_LEFT),  
                             LENGTH(NUM_LEFT) - 4))  
         END  
    INTO NUM1  
    FROM DUAL; ---取得千、百、十、万位上的数字  
  IF LENGTH(NUM_LEFT) > 16 THEN  
    RETURN '**********';  
  END IF; --数字整数部分超过16位时  
  
  --采用从低至高的算法,先处理小数点右边的数字  
  IF LENGTH(NUM_RIGHT) = 2 THEN  
    IF TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) = 0 THEN  
      RESULT := '零' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    ELSE  
      RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角' ||  
                SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 2, 1)) + 1, 1) || '分';  
    END IF;  
  ELSIF LENGTH(NUM_RIGHT) = 1 THEN  
    RESULT := SUBSTR(STR1, TO_NUMBER(SUBSTR(NUM_RIGHT, 1, 1)) + 1, 1) || '角整';  
  ELSE  
    RESULT := '整';  
  END IF;  
  --再处理小数点左边的数字  
  FOR I IN REVERSE 1 .. LENGTH(NUM_LEFT) LOOP  
    --(从低至高)  
    NUM_COUNT   := NUM_COUNT + 1; --当前数字位数  
    NUM_CURRENT := TO_NUMBER(SUBSTR(NUM_LEFT, I, 1)); --当前位上的数字  
    IF NUM_CURRENT > 0 THEN  
      --当前位上数字不为0按正常处理  
      RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) ||  
                SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
    ELSE  
      --当前位上数字为0时  
      IF NUM_COUNT = 5 THEN  
        IF MOD(NUM_COUNT - 1, 4) = 0 AND NUM1 <> 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零 --当前位是元、万或亿时  
        END IF;  
      ELSE  
        IF MOD(NUM_COUNT - 1, 4) = 0 THEN  
          RESULT  := SUBSTR(STR2, NUM_COUNT, 1) || RESULT;  
          NUM_PRE := 0; --元、万,亿前不准加零  
        END IF;  
      END IF;  
      IF NUM_PRE > 0 OR LENGTH(NUM_LEFT) = 1 THEN  
        --上一位数字不为0或只有个位时  
        RESULT := SUBSTR(STR1, NUM_CURRENT + 1, 1) || RESULT;  
      END IF;  
    END IF;  
    NUM_PRE := NUM_CURRENT;  
  END LOOP;  
  
  IF P_NUM < 0 THEN  
    --转换数字是负数时  
    RESULT := '负' || RESULT;  
  END IF;  
  
  RETURN RESULT;  
  
EXCEPTION  
  WHEN OTHERS THEN  
    RAISE_APPLICATION_ERROR(-20001, '数字转换大写出现错误!' || SQLERRM);  
END;  

oracle拆分逗号分隔字符串 实现split

技术文章admin 发表了文章 • 0 个评论 • 66 次浏览 • 2018-04-30 12:02 • 来自相关话题

一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,
拆成

first field
second field
third field

第一种 用10G开始支持的正则表达式

anbob@ANBOB>SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum)
  2  FROM DUAL
  3  CONNECT BY ROWNUM <=
  4  LENGTH ('first field, second field , third field') - LENGTH (REPLACE ('first field, second field , third field', ',', ''))+1;

REGEXP_SUBSTR('FIRSTFIELD,SECONDFIELD,THIRDFIELD','[^,]+',1,ROWNUM)
------------------------------------------------------------------------------
first field
second field
third field
TIP:
REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1

第二种用type,function

第一,先创建一个Type

CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,创建函数

create or replace function split(p_list varchar2,p_sep varchar2 := ’,’)
return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
 loop
   l_idx := instr(v_list,p_sep);
   if l_idx = 0 then
     pipe row(substr(v_list,1,l_idx-1));
     v_list := substr(v_list,l_idx+length(p_sep));
   else
     pipe row(v_list);
    exit;
   end if;
  end loop;
end split;
第三,调试

select * from table(split(‘aaa,bbb,ccc’,',’));

拆分列字段

anbob@ANBOB>select * from test11;

                  ID NAME
-------------------- ----------
                   1 a,b,c
                   2 e,d

nbob@ANBOB>with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100)  
  2       select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1,  
  3                          instr(t.vals, ',', 1, tv.lv + 1) -(  
  4                          instr(t.vals, ',', 1, tv.lv) + 1)  
  5                   ) AS name  
  6       from (select id,',' || name || ',' AS vals,  
  7                  length(name || ',') - nvl(length(REPLACE(name, ',')), 0) AS cnt  
  8             from test11) t join temp0 tv  
  9                       on  tv.lv <= t.cnt  order by 1;

                  ID NAME
-------------------- ------------------------
                   1 a
                   1 b
                   1 c
                   2 d
                   2 e
扩展 regexp_replace

V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’

anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.

anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.

anbob@NCME>commit;
Commit complete.

anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;

NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931 查看全部
一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,
拆成

first field
second field
third field

第一种 用10G开始支持的正则表达式

anbob@ANBOB>SELECT REGEXP_SUBSTR ('first field, second field , third field', '[^,]+', 1,rownum)
  2  FROM DUAL
  3  CONNECT BY ROWNUM <=
  4  LENGTH ('first field, second field , third field') - LENGTH (REPLACE ('first field, second field , third field', ',', ''))+1;

REGEXP_SUBSTR('FIRSTFIELD,SECONDFIELD,THIRDFIELD','[^,]+',1,ROWNUM)
------------------------------------------------------------------------------
first field
second field
third field
TIP:
REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1

第二种用type,function

第一,先创建一个Type

CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,创建函数

create or replace function split(p_list varchar2,p_sep varchar2 := ’,’)
return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
 loop
   l_idx := instr(v_list,p_sep);
   if l_idx = 0 then
     pipe row(substr(v_list,1,l_idx-1));
     v_list := substr(v_list,l_idx+length(p_sep));
   else
     pipe row(v_list);
    exit;
   end if;
  end loop;
end split;
第三,调试

select * from table(split(‘aaa,bbb,ccc’,',’));

拆分列字段

anbob@ANBOB>select * from test11;

                  ID NAME
-------------------- ----------
                   1 a,b,c
                   2 e,d

nbob@ANBOB>with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100)  
  2       select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1,  
  3                          instr(t.vals, ',', 1, tv.lv + 1) -(  
  4                          instr(t.vals, ',', 1, tv.lv) + 1)  
  5                   ) AS name  
  6       from (select id,',' || name || ',' AS vals,  
  7                  length(name || ',') - nvl(length(REPLACE(name, ',')), 0) AS cnt  
  8             from test11) t join temp0 tv  
  9                       on  tv.lv <= t.cnt  order by 1;

                  ID NAME
-------------------- ------------------------
                   1 a
                   1 b
                   1 c
                   2 d
                   2 e
扩展 regexp_replace

V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’

anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.

anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.

anbob@NCME>commit;
Commit complete.

anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;

NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931

windows账号禁止本地登录

回复

技术文章admin 发起了问题 • 1 人关注 • 0 个回复 • 88 次浏览 • 2018-04-30 10:55 • 来自相关话题

局域网共享的实现

技术文章admin 发表了文章 • 0 个评论 • 65 次浏览 • 2018-04-30 09:48 • 来自相关话题

在局域网内其他运行Windows操作系统的计算机上,可以通过网上邻居实现文件和磁盘的远程共享。
 通常情况下,只要计算机连接至局域网络,并配置了正确的IP地址信息,那么,Windows只需运行片刻,即可发现网络中所有的工作组和计算机。
对于Windows Me、Windows 2000和Windows XP而言,更是可以直接发现网络中可供共享的文件夹,并将之显示在Windows资源管理器的网络邻居中。
用户可做的,只是双击并打开自己感兴趣的文件夹而已。 注意:如果在网上邻居中无法找到欲共享资源的计算机,可利用查找计算机的方式,利用该计算机的名称查找该计算机。另外,实现共享的计算机之间应当使用同一网段的IP地址,否则,彼此之间将无法找到。
 SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。 当2000使用网络共享的时候,就面临着选择139或者445端口了。
 下面的情况确定会话使用的端口:
 1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口进行SMB的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。 
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访问NT机器的共享会失败。 
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁用NBT,那么就只监听445端口了。
  查看全部
在局域网内其他运行Windows操作系统的计算机上,可以通过网上邻居实现文件和磁盘的远程共享。
 通常情况下,只要计算机连接至局域网络,并配置了正确的IP地址信息,那么,Windows只需运行片刻,即可发现网络中所有的工作组和计算机。
对于Windows Me、Windows 2000和Windows XP而言,更是可以直接发现网络中可供共享的文件夹,并将之显示在Windows资源管理器的网络邻居中。
用户可做的,只是双击并打开自己感兴趣的文件夹而已。 注意:如果在网上邻居中无法找到欲共享资源的计算机,可利用查找计算机的方式,利用该计算机的名称查找该计算机。另外,实现共享的计算机之间应当使用同一网段的IP地址,否则,彼此之间将无法找到。
 SMB(Server Message Block)协议在NT/2000中用来作文件共享,在NT中,SMB运行于NBT(NetBIOS over TCP/IP)上,使用137,139(UDP),139(TCP)端口。在2000中,SMB可以直接运行在tcp/ip上,而没有额外的NBT层,使用TCP 445端口。 当2000使用网络共享的时候,就面临着选择139或者445端口了。
 下面的情况确定会话使用的端口:
 1、如果客户端启用了NBT,那么连接的时候将同时访问139和445端口,如果从445端口得到回应,那么客户端将发送RST到139端口,终止这个端口的连接,接着就从445端口进行SMB的会话了;如果没有从445端口而是从139得到回应,那么就从139端口进行会话;如果没有得到任何回应,那么SMB会话失败。 
2、如果客户端禁用了NBT,他就将只从445端口进行连接。当然如果服务器(开共享端)没有445端口进行SMB会话的话,那么就会访问失败了,所以禁用445端口后,对访问NT机器的共享会失败。 
3、如果服务器端启用NBT,那么就同时监听UDP 137、138端口和TCP139,445。如果禁用NBT,那么就只监听445端口了。
 

修改远程桌面端口

技术文章admin 发表了文章 • 0 个评论 • 74 次浏览 • 2018-04-30 08:28 • 来自相关话题

如果打开了防火墙,先在入站规则里加上你要修改成的端口,如56789
1、打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
2、再打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP-Tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
也可以搜索注册表 CTRL+F ,PortNamber,把3389改成56789
修改完后需要重启生效,注意防火墙的问题! 查看全部
如果打开了防火墙,先在入站规则里加上你要修改成的端口,如56789
1、打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
2、再打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP-Tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如56789
也可以搜索注册表 CTRL+F ,PortNamber,把3389改成56789
修改完后需要重启生效,注意防火墙的问题!

Oracle 查看表空间的大小及使用情况sql语句

技术文章admin 发表了文章 • 0 个评论 • 61 次浏览 • 2018-04-29 11:46 • 来自相关话题

1、查看表空间的名称及大小 
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
--2、查看表空间物理文件的名称及大小 
SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 
--3、查看回滚段名称及大小 
SELECT segment_name, 
tablespace_name, 
r.status, 
(initial_extent / 1024) initialextent, 
(next_extent / 1024) nextextent, 
max_extents, 
v.curext curextent 
FROM dba_rollback_segs r, v$rollstat v 
WHERE r.segment_id = v.usn(+) 
ORDER BY segment_name; 
--4、查看控制文件 
SELECT NAME FROM v$controlfile; 
--5、查看日志文件 
SELECT MEMBER FROM v$logfile; 
--6、查看表空间的使用情况 
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 
SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 
--7、查看数据库库对象 
SELECT owner, object_type, status, COUNT(*) count# 
FROM all_objects 
GROUP BY owner, object_type, status; 
--8、查看数据库的版本  
SELECT version 
FROM product_component_version 
WHERE substr(product, 1, 6) = 'Oracle'; 
--9、查看数据库的创建日期和归档方式 
SELECT created, log_mode, log_mode FROM v$database; 
--1G=1024MB 
--1M=1024KB 
--1K=1024Bytes 
--1M=11048576Bytes 
--1G=1024*11048576Bytes=11313741824Bytes 
SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 
  查看全部
1、查看表空间的名称及大小 
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size 
FROM dba_tablespaces t, dba_data_files d 
WHERE t.tablespace_name = d.tablespace_name 
GROUP BY t.tablespace_name; 
--2、查看表空间物理文件的名称及大小 
SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 
--3、查看回滚段名称及大小 
SELECT segment_name, 
tablespace_name, 
r.status, 
(initial_extent / 1024) initialextent, 
(next_extent / 1024) nextextent, 
max_extents, 
v.curext curextent 
FROM dba_rollback_segs r, v$rollstat v 
WHERE r.segment_id = v.usn(+) 
ORDER BY segment_name; 
--4、查看控制文件 
SELECT NAME FROM v$controlfile; 
--5、查看日志文件 
SELECT MEMBER FROM v$logfile; 
--6、查看表空间的使用情况 
SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 
SELECT a.tablespace_name, 
a.bytes total, 
b.bytes used, 
c.bytes free, 
(b.bytes * 100) / a.bytes "% USED ", 
(c.bytes * 100) / a.bytes "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 
--7、查看数据库库对象 
SELECT owner, object_type, status, COUNT(*) count# 
FROM all_objects 
GROUP BY owner, object_type, status; 
--8、查看数据库的版本  
SELECT version 
FROM product_component_version 
WHERE substr(product, 1, 6) = 'Oracle'; 
--9、查看数据库的创建日期和归档方式 
SELECT created, log_mode, log_mode FROM v$database; 
--1G=1024MB 
--1M=1024KB 
--1K=1024Bytes 
--1M=11048576Bytes 
--1G=1024*11048576Bytes=11313741824Bytes 
SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name 
 

最近用到从oracle的dmp文件中还原数据

技术文章admin 发表了文章 • 0 个评论 • 66 次浏览 • 2018-04-29 11:13 • 来自相关话题

由于没有这方面的资料,在网上搜集了一些,相信有以下这些资料,我们可以成功地将dmp文件用命令行的方式还原回去


在这里我用的是oracle10g的版本,我的机器是512内存的,运行oracle的web管理程序有一些困难,所以我选择通过命令行的方式,
以下我的安装完成后,oracle给出的报告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


数据库配置文件已经安装到 
E:/oracle/product/10.2.0,


同时其他选定的安装组件也已经安装到 
E:/oracle/product/10.2.0/db_1。


iSQL*Plus URL 为:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 为:
http://localhost:5560/isqlplus/dba

下面我们来看一看如何来完成这一任务

第一,启动服务,(如果数据库处于启动状态,那么略过这一步)

打开命令行执行以下语句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 

 
  以上方式是在windows服务中启动服务,当windows服务不能启动数据库实例的时候,应用以下的语句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup 
 

 

第二清理以前还原过的痕迹,如果我们在数据库曾经还原过,我们先来清理一下,痕迹,
    //删除用户
    drop user xxxx cascade; 
    //删除表空间
    drop tablespace xxxx;
    //删除数据库文件
    e:/xxxxxx.dbf


第三,接下来,准备工作做好后,我们就可以开始还原了
//创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//给予用户权限
grant connect,resource,dba to xxxx
 

//创建表空间,并指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF' 
 SIZE 100M 
 AUTOEXTEND ON NEXT 100M 
 MAXSIZE UNLIMITED 
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

 

//执行给予权限的脚本grant.txt,将权限给予刚才创建的用户
//给予权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//开始导入(完全导入),file:dmp文件所在的位置, ignore:因为有的表已经存在,对该表就不进行导入。
   在后面加上 ignore=y 。指定log文件 log=e:/log.txt
imp user/pass@orcl full=y file=e:/xxx.dmp ignore=y log=e:/log.txt

//当我们不需要完整的还原数据库的时候,我们可以单独地还原某个特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/pass@database file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx) 
//---------------------------------------------------------------------------

 

//做到这里我们就已经完成了,数据库的还原工作,下面我们就可以打开isqlplus查看表中的数据了
 
select * from ***
 

第四我们来看一下,对oracle常用的操作命令
1)查看表空间的属性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一个表的列,及这一列的列名,数据类型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空间中的用户表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用户下,的表的数量
 select count(*) from user_tab_columns 
 

5)查看数据库中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用户ZBFC的所有的表名及表存放的表空间
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成删除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)删除表级联删除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc 
 

10)查看数据库的临时空间
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down ... 0.txt


作者在导入的过程中,还遇到了一个错误,就是数据违反了唯一性约束,数据库拒绝了数据
IMP-00019: 由于 ORACLE 的 1 错误而拒绝行
在网上看到有人说,这是字符集的原因,所以我就新建了一个数据库,将字符集改成了ZHS16GBK这样,从新导了一次,结果就成功了

 下面是grant.txt脚本 查看全部

由于没有这方面的资料,在网上搜集了一些,相信有以下这些资料,我们可以成功地将dmp文件用命令行的方式还原回去


在这里我用的是oracle10g的版本,我的机器是512内存的,运行oracle的web管理程序有一些困难,所以我选择通过命令行的方式,
以下我的安装完成后,oracle给出的报告


Enterprise Manager Database Control URL - (orcl) :
http://localhost:1158/em


数据库配置文件已经安装到 
E:/oracle/product/10.2.0,


同时其他选定的安装组件也已经安装到 
E:/oracle/product/10.2.0/db_1。


iSQL*Plus URL 为:
http://localhost:5560/isqlplus


iSQL*Plus DBA URL 为:
http://localhost:5560/isqlplus/dba

下面我们来看一看如何来完成这一任务

第一,启动服务,(如果数据库处于启动状态,那么略过这一步)

打开命令行执行以下语句
net start OracleServiceORCL
net start  OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus

 

 
  以上方式是在windows服务中启动服务,当windows服务不能启动数据库实例的时候,应用以下的语句
  set oracle_sid=orcl
  oradim -startup -sid orcl

  sqlplus internal/oracle
  startup 
 

 

第二清理以前还原过的痕迹,如果我们在数据库曾经还原过,我们先来清理一下,痕迹,
    //删除用户
    drop user xxxx cascade; 
    //删除表空间
    drop tablespace xxxx;
    //删除数据库文件
    e:/xxxxxx.dbf


第三,接下来,准备工作做好后,我们就可以开始还原了
//创建用户
CREATE USER 用户名 IDENTIFIED BY 密码 DEFAULT TABLESPACE  USERS TEMPORARY TABLESPACE TEMP
 
//给予用户权限
grant connect,resource,dba to xxxx
 

//创建表空间,并指定文件名,和大小
CREATE SMALLFILE TABLESPACE "xxxx" DATAFILE 'E:/ORADATA/ORCL/xxxx.DBF' 
 SIZE 100M 
 AUTOEXTEND ON NEXT 100M 
 MAXSIZE UNLIMITED 
 LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO

 

//执行给予权限的脚本grant.txt,将权限给予刚才创建的用户
//给予权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
      DBA,CONNECT,RESOURCE,CREATE SESSION  TO xxxx


//开始导入(完全导入),file:dmp文件所在的位置, ignore:因为有的表已经存在,对该表就不进行导入。
   在后面加上 ignore=y 。指定log文件 log=e:/log.txt
imp user/pass@orcl full=y file=e:/xxx.dmp ignore=y log=e:/log.txt

//当我们不需要完整的还原数据库的时候,我们可以单独地还原某个特定的表
//---------------------------------------------------------------------------
imp user/pass@datbase file=e:/xxx.dmp ignore=y log=e:/log.txt tables=(xxxx)
imp user/pass@database file=e:/xxx.dmp ignore=y log=e:/log2.txt tables=(xxxx) 
//---------------------------------------------------------------------------

 

//做到这里我们就已经完成了,数据库的还原工作,下面我们就可以打开isqlplus查看表中的数据了
 
select * from ***
 

第四我们来看一下,对oracle常用的操作命令
1)查看表空间的属性
 select tablespace_name,extent_management,allocation_type from dba_tablespaces


2)查找一个表的列,及这一列的列名,数据类型
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where TABLE_NAME='xxxx'

 
3)查找表空间中的用户表
 select * from all_tables where owner='xxx' order by table_name desc

4)在指定用户下,的表的数量
 select count(*) from user_tab_columns 
 

5)查看数据库中的表名,表列,所有列
 select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns order by table_name desc

6)查看用户ZBFC的所有的表名及表存放的表空间
 select table_name,tablespace_name from all_tables where owner='xxxx' order by table_name desc
7)生成删除表的文本
select 'Drop   table '||table_name||';' from all_tables where owner="ZBFC";

8)删除表级联删除
drop table table_name [cascade constraints];

9)查找表中的列
select TABLE_NAME,COLUMN_NAME,DATA_TYPE   from user_tab_columns where column_name like '%'||'地'||'%' order by table_name

desc 
 

10)查看数据库的临时空间
select tablespace_name,EXTENT_SIZE,current_users,total_extents,used_extents,MAX_SIZE,free_extents from v$sort_segment;

 http://download1.csdn.net/down ... 0.txt


作者在导入的过程中,还遇到了一个错误,就是数据违反了唯一性约束,数据库拒绝了数据
IMP-00019: 由于 ORACLE 的 1 错误而拒绝行
在网上看到有人说,这是字符集的原因,所以我就新建了一个数据库,将字符集改成了ZHS16GBK这样,从新导了一次,结果就成功了

 下面是grant.txt脚本

oracle_RESTRICTED模式

技术文章admin 发表了文章 • 0 个评论 • 64 次浏览 • 2018-04-29 08:57 • 来自相关话题

开启限制会话模式:

alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   

RESTRICTED模式以后  除了管理员都不能登录,如果需要非管理员登录,必须
GRANT restricted session to test;




那么以限制会话模式登入有两种方法:

一:正常登入数据库后执行alter system enable restricted session;




二:sqlplus  /nolog

       conn /as sysdba

      shutdown  immediate;

       startup  restrict




个人喜欢用第二种方法,第一种有的时候居然 alter system disable restricted session; 后无效。 查看全部
开启限制会话模式:

alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   

RESTRICTED模式以后  除了管理员都不能登录,如果需要非管理员登录,必须
GRANT restricted session to test;




那么以限制会话模式登入有两种方法:

一:正常登入数据库后执行alter system enable restricted session;




二:sqlplus  /nolog

       conn /as sysdba

      shutdown  immediate;

       startup  restrict




个人喜欢用第二种方法,第一种有的时候居然 alter system disable restricted session; 后无效。

ORACLE 修改字符集 ZHS16GBK;

技术文章admin 发表了文章 • 0 个评论 • 59 次浏览 • 2018-04-29 08:56 • 来自相关话题

Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利

PS C:\Users\Administrator>  sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月

Copyright (c) 1982, 2010, Oracle.  All rights reserv

SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup mount
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

系统已更改。

SQL>  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

系统已更改。

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

系统已更改。

SQL>  alter database open;

数据库已更改。

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL>  ALTER DATABASE character set INTERNAL_USE ZHS1
---跳过超级检查
数据库已更改。

SQL>  select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> alter system disable restricted session;
开启限制会话模式:
-----------------------------------------------------------------------------------
alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   
  查看全部
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利

PS C:\Users\Administrator>  sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 4月

Copyright (c) 1982, 2010, Oracle.  All rights reserv

SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup mount
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

系统已更改。

SQL>  ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

系统已更改。

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

系统已更改。

SQL>  alter database open;

数据库已更改。

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
第 1 行出现错误:
ORA-12712: 新字符集必须为旧字符集的超集


SQL>  ALTER DATABASE character set INTERNAL_USE ZHS1
---跳过超级检查
数据库已更改。

SQL>  select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>  startup
ORACLE 例程已经启动。

Total System Global Area 5.4784E+10 bytes
Fixed Size                  2188768 bytes
Variable Size            2.6038E+10 bytes
Database Buffers         2.8723E+10 bytes
Redo Buffers               20566016 bytes
数据库装载完毕。
数据库已经打开。
SQL> select * from v$nls_parameters;

PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_LANGUAGE
SIMPLIFIED CHINESE

NLS_TERRITORY
CHINA

NLS_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_ISO_CURRENCY
CHINA

NLS_NUMERIC_CHARACTERS
.,

NLS_CALENDAR
GREGORIAN


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_DATE_FORMAT
DD-MON-RR

NLS_DATE_LANGUAGE
SIMPLIFIED CHINESE

NLS_CHARACTERSET
ZHS16GBK


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_SORT
BINARY

NLS_TIME_FORMAT
HH.MI.SSXFF AM

NLS_TIMESTAMP_FORMAT
DD-MON-RR HH.MI.SSXFF AM


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_TIME_TZ_FORMAT
HH.MI.SSXFF AM TZR

NLS_TIMESTAMP_TZ_FORMAT
DD-MON-RR HH.MI.SSXFF AM TZR

NLS_DUAL_CURRENCY



PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CHARACTERSET
AL16UTF16

NLS_COMP
BINARY

NLS_LENGTH_SEMANTICS
BYTE


PARAMETER
----------------------------------------------------
VALUE
----------------------------------------------------
NLS_NCHAR_CONV_EXCP
FALSE


已选择19行。

SQL> alter system disable restricted session;
开启限制会话模式:
-----------------------------------------------------------------------------------
alter system enable restricted session;
取消限制会话模式:
alter system disable restricted session;   
 

oracle11g 修改字符集 修改为ZHS16GBK

技术文章admin 发表了文章 • 0 个评论 • 66 次浏览 • 2018-04-29 08:48 • 来自相关话题

1.cmd下,cd到oracle数据库软件的服务器端 如:D:\app\Administrator\product\11.2.0\dbhome_1\BIN

2.输入set ORACLE_SID=你想进入的数据库的那个sid

3.输入 sqlplus /nolog

4.将数据库启动到RESTRICTED模式下做字符集更改: 

SQL> conn /as sysdba 

Connected. 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup mount 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; 

System altered. 

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 

System altered. 

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; 

System altered. 

SQL> alter database open; 

Database altered. 

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; 

ALTER DATABASE CHARACTER SET ZHS16GBK 



ERROR at line 1: 

ORA-12712: new character set must be a superset of old character set 

 

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改: 

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 

Database altered. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

重启检查是否更改完成: 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

Database opened. 

SQL> select * from v$nls_parameters; 

alter system disable restricted session;    查看全部

1.cmd下,cd到oracle数据库软件的服务器端 如:D:\app\Administrator\product\11.2.0\dbhome_1\BIN

2.输入set ORACLE_SID=你想进入的数据库的那个sid

3.输入 sqlplus /nolog

4.将数据库启动到RESTRICTED模式下做字符集更改: 

SQL> conn /as sysdba 

Connected. 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup mount 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; 

System altered. 

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 

System altered. 

SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; 

System altered. 

SQL> alter database open; 

Database altered. 

SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; 

ALTER DATABASE CHARACTER SET ZHS16GBK 



ERROR at line 1: 

ORA-12712: new character set must be a superset of old character set 

 

提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改: 

SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; 

Database altered. 

SQL> select * from v$nls_parameters; 

略 

19 rows selected. 

重启检查是否更改完成: 

SQL> shutdown immediate; 

Database closed. 

Database dismounted. 

ORACLE instance shut down. 

SQL> startup 

ORACLE instance started. 

Total System Global Area  236000356 bytes 

Fixed Size                   451684 bytes 

Variable Size             201326592 bytes 

Database Buffers           33554432 bytes 

Redo Buffers                 667648 bytes 

Database mounted. 

Database opened. 

SQL> select * from v$nls_parameters; 

alter system disable restricted session;