Author Archives: 梁芝刚

(转)oracle rac修改ip的处理办法

oracle rac修改ip的处理办法

2013-12-30 10:01:32

分类: Oracle

1、前言
最近有一个客户,想搬迁机房,但他们有一套oracle rac,搬迁后,要修改ip地址,怕出问题,叫我们现场支持一下!我们也到现场服务,并且帮他们修改了ip地址,并且成功启动服务,现在把整个过程记录下来,供大家参阅!

2、首先检查系统情况,并对ip进行修改

其实,修改ip后的调整,也可以按照重新配置的方法进行,具体操作过程详见《oracle10g rac 表决盘损坏、ocr损坏处理

[root@dbrac1 bin]# cat /etc/hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               dbrac1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
#pubip
192.168.104.151         dbrac1
192.168.104.153         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
192.168.104.152         virt1
192.168.104.154         virt2

以上是原来的ip地址

要修改成如下ip地址:

#pubip
10.10.10.21         dbrac1
10.10.10.23         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
10.10.10.22         virt1
10.10.10.24         virt2

2、首先停止集群服务

–停数据库

[oracle@dbrac1 bin]$./srvctl stop database -d dbrac -o immediate
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac2
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac2

–停crs服务
[root@dbrac1 bin]#./crsctl stop crs
[root@dbrac2 bin]#./crsctl stop crs
两个节点都停

3、修改ip地址

修改ip地址:
[root@dbrac1 bin]# vi /etc/hosts

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1               dbrac1 localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6

#pubip
10.10.10.21         dbrac1
10.10.10.23         dbrac2
#privip
10.10.1.1               priv1
10.10.1.2               priv2
#virip
10.10.10.22         virt1
10.10.10.24         virt2

所以,修改pulic,首先要修改hosts,改成相应的ip地址,这一步,两个节点都要做!

–编辑网卡文件
[root@dbrac1 bin]# vi /etc/sysconfig/network-scripts/ifcfg-eth0    –eth0是public网卡,eth1是私网卡,都要对照编写好!

这一步要注意,两个节点都要做,ip要编写正确。

–重启网卡服务
[root@dbrac1 bin]# service network restart

基本上的更改工作就结束了

4、配置集群连接配置

[root@dbrac1 bin]#./crsctl start crs

[root@dbrac1 bin]# ./oifcfg getif

[root@dbrac1 bin]#./oifcfg delif -global eth0
[root@dbrac1 bin]#./oifcfg setif -global eth0/10.10.10.0:public

如果调整了virtual ip,则要调整私网连接

[root@dbrac1 bin]#./oifcfg delif -global eth1
[root@dbrac1 bin]#./oifcfg setif -global eth1/10.10.1.0:cluster_interconnect
两个节点都要变更,如果网段没有变化,则可以不用这一步!在本例中,进行了修改,所以vip也需要调整

–执行vip的调整
[oracle@dbrac1 bin]$./srvctl stop database -d dbrac -o immediate
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop asm -n dbrac2
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac1
[oracle@dbrac1 bin]$./srvctl stop nodeapps -n dbrac2

[root@dbrac1 bin]#./crsctl stop crs
[root@dbrac2 bin]#./crsctl stop crs

用oracle进行这项操作

[oracle@dbrac1 bin]$./srvctl config nodeapps -n dbrac1 -a

注意是两个节点

[root@dbrac1 bin]# ./srvctl modify nodeapps -n dbrac1 -A 10.10.10.22/255.255.255.0/eth0
[root@dbrac2 bin]# ./srvctl modify nodeapps -n dbrac2 -A 10.10.10.24/255.255.255.0/eth0

这时,如果监听里面记录的是ip地址,要进行修改!

到这时,就可以启crs

[root@dbrac2 bin]# ./crsctl start crs
[root@dbrac1 bin]# ./crsctl start crs

更改成功,顺利启动!

想要在OpenStack这个热闹的大集市里招揽生意

作为一个高尚的流浪者
想要在OpenStack这个热闹的大集市里招揽生意
除了吸引眼球的卖力吆喝
能留住人心的永远是
从中赋予的绝佳体验

巴塞罗那的La Rambla大街被称为“流浪者大街”,其本身就是一出永远也演不完的戏。

用余秋雨的话说:“这里浑然融合,主客不分。由于时时流动,这里形不成地盘,构不成统制,更不会出现兼并和垄断。” 不知什么时候形成的规范,在这里出现的一切,必须干净、文雅,不涉恶浊,不重招徕。

这样的一处所在,让人们懂得——真正的流浪者是高尚的。而正是这样的一种情怀,吸引到OpenStack 峰会(OpenStack Summit)最新的目光。

当OpenStack基金会COO Mark Collier在巴塞罗那的国际会展中心(CCIB)里说出第一句“welcome”时。我眼前恍惚的却是La Rambla大街与地中海衔接处那个哥伦布雕像的身影。云在他身边飘荡,他全然不理,只抬头放眼,注视远方。远方尽是地中海的浩荡碧波,他的目光全然穿越地中海,锐利而又渺茫。

(转LGC)整理的DBA常用脚本

整理的DBA常用脚本
oracle用户权限检查

1. 系统权限记录在 dba_sys_privs 视图中:
select grantee, privilege, admin_option
from dba_sys_privs
where grantee = ‘USERNAME’ ;

2. 角色权限记录在 dba_role_privs 视图中:
select grantee, granted_role, admin_option
from dba_role_privs
where grantee = ‘USERNAME’ ;

3. 对象权限记录在 dba_tab_privs 视图中,虽然视图名看起来像是表权限,但是实际包含了包,存储过程等等对象级的权限:
select grantee, owner || ‘.’ || table_name obj_name, privilege, grantable
from dba_tab_privs
where grantee = ‘USERNAME’;

4. 其他还有部分权限,如表空间的quota权限,记录在 dba_ts_quota中:
select username,
tablespace_name,
bytes / 1024 / 1024 “used space (m)”,
decode(decode(max_bytes, -1, 0, max_bytes) / 1024 / 1024,
0,
‘unlimited’,
max_bytes / 1024 / 1024) “max space(m)”,
blocks used_blocks,
max_blocks
from dba_ts_quotas
where username = ‘USERNAME’;
select * from session_privs; 当前用户拥有的权限
SELECT * FROM DBA_SYS_PRIVS; 查询每个用户的权限
锁的检查
select b.owner,
b.object_name,
l.SESSION_ID,
DECODE(L.LOCKED_MODE,
0,
‘None’,
1,
‘Null’,
2,
‘Row-S (SS)’,
3,
‘Row-X (SX)’,
4,
‘Share’,
5,
‘S/Row-X (SSX)’,
6,
‘Exclusive’,
TO_CHAR(L.LOCKED_MODE)) MODE_HELD,
s.USERNAME
from dba_objects b, v$locked_object l, V$SESSION S
where b.object_id = l.object_id
and l.SESSION_ID = s.SID
查看一个长查询的进度
SELECT *
FROM ( select username,opname,sid,serial#,
context,b.sql_text,sofar,totalwork,
round(sofar/totalwork*100,2) “% Complete”,
elapsed_seconds
from v$session_longops , v$sql b
where sql_hash_value=b.hash_value
and sql_address = address
and totalwork <> 0
)
WHERE “% Complete” <> 100 ;
查看ACTIVE SESSION的等待事件
select a.event,
sum(decode(wait_Time, 0, 0, 1)) “Prev”,
sum(decode(wait_Time, 0, 1, 0)) “Curr”,
count(*) “Tot”
from v$session_wait a, v$session b
where a.sid = b.sid
and b.status = ‘ACTIVE’
group by a.event
— having count(*) > 10
order by 4;

在某个用户下找所有的索引
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;
通过DBMS_METADATA包得到对象的DLL语句
a.获取单个的建表和建索引的语法,其他对象类似:
select dbms_metadata.get_ddl(‘TABLE’,’TABLE_NAME’,’TABLE_OWNER’) from dual;
select dbms_metadata.get_ddl(‘INDEX’,’INDEX_NAME’,’INDEX_OWNER’) from dual;

b.获取一个SCHEMA下的所有建表的语法,以scott为例,其他对象类似:
SELECT DBMS_METADATA.GET_DDL(‘TABLE’, u.table_name, u.owner) || ‘;’
FROM DBA_TABLES u
where owner = ‘SCOTT’ ;
查看回滚段名称及大小
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;

查看表空间的名称及大小
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;

查看数据库的版本
Select version
FROM Product_component_version
Where SUBSTR(PRODUCT, 1, 6) = ‘Oracle’;

查看数据库的创建日期和归档方式
Select Created, Log_Mode From V$Database;

查看还没提交的事务
select * from v$locked_object;
select * from v$transaction;
查找object为哪些进程
select p.spid,
s.sid,
s.serial# serial_num,
s.username user_name,
a.type object_type,
s.osuser os_user_name,
a.owner,
a.object object_name,
decode(sign(48 – command),
1,
to_char(command),
‘Action Code #’ || to_char(command)) action,
p.program oracle_process,
s.terminal terminal,
s.program program,
s.status session_status
from v$session s, v$access a, v$process p
where s.paddr = p.addr
and s.type = ‘USER’
and a.sid = s.sid
and a.object = ‘EMP’
order by s.username, s.osuser
怎样计算一个表占用的空间的大小?
select owner,
table_name,
NUM_ROWS,
BLOCKS * AAA / 1024 / 1024 “Size M”,
EMPTY_BLOCKS,
LAST_ANALYZED
from dba_tables
where table_name = ‘XXX’;

注意:执行以上语句前要先对表做统计分析

select sum(a.bytes) / 1024 * 1024 “size”
from dba_extents a
where a.segment_name = ‘GOV_FDDBR’
select a.bytes / 1024 * 1024 “size”, (a.blocks * 8192) / 1024 * 1024 “da”
from dba_segments a
where a.segment_name = ‘GOV_FDDBR’
如何查看最大会话数
SELECT * FROM V$PARAMETER WHERE NAME LIKE ‘proc%’;
SQL>
SQL> show parameter processes

NAME TYPE VALUE
———————————— ——- ——————————
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 4
log_archive_max_processes integer 1
processes integer 200

这里为200个用户。

select * from v$license;
其中sessions_highwater纪录曾经到达的最大会话数
如何在Oracle服务器上通过SQLPLUS查看本机IP地址

select sys_context(‘userenv’,’ip_address’) from dual;

如何将表、索引移动表空间
ALTER TABLE TABLE_NAME MOVE TABLESPACE_NAME;
ALTER INDEX INDEX_NAME REBUILD TABLESPACE TABLESPACE_NAME;
如何才能得知系统当前的SCN号
select max(ktuxescnw * power(2, 32) + ktuxescnb) from x$ktuxe;
如何在字符串里加回车
select ‘Welcome to visit’||chr(10)||’www.CSDN.NET’ from dual;
如何将小表放入keep池中
alter table xxx storage(buffer_pool keep);
如何查询做比较大的排序的进程?
SELECT b.tablespace,
b.segfile#,
b.segblk#,
b.blocks,
a.sid,
a.serial#,
?? a.username,
a.osuser,
a.status ??
FROM v$session a, v$sort_usage b ??
WHERE a.saddr = b.session_addr ??
ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks;

如何删除重复记录?
DELETE FROM TABLE_NAME
WHERE ROWID != (SELECT MAX(ROWID)
FROM TABLE_NAME D
WHERE TABLE_NAME.COL1 = D.COL1
AND TABLE_NAME.COL2 = D.COL2);
如何回滚段的争用情况
select name, waits, gets, waits / gets “Ratio”
from v$rollstat C, v$rollname D
where C.usn = D.usn;
如何监控表空间的 I/O 比例
select B.tablespace_name name,
B.file_name “file”,
A.phyrds pyr,
A.phyblkrd pbr,
A.phywrts pyw,
A.phyblkwrt pbw
from v$filestat A, dba_data_files B
where A.file# = B.file_id
order by B.tablespace_name;

如何监控文件系统的 I/O 比例
Select substr(C.file#, 1, 2) “#”,
substr(C.name, 1, 30) “Name”,
C.status,
C.bytes,
D.phyrds,
D.phywrts
from v$datafile C, v$filestat D
where C.file# = D.file#;
如何在某个用户下找所有的索引
select user_indexes.table_name,
user_indexes.index_name,
uniqueness,
column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type,
user_indexes.table_name,
user_indexes.index_name,
column_position;
如何监控 SGA 中字典缓冲区的命中率
select parameter,
gets,
Getmisses,
getmisses / (gets + getmisses) * 100 “miss ratio”,
(1 – (sum(getmisses) / (sum(gets) + sum(getmisses)))) * 100 “Hit ratio”
from v$rowcache
where gets + getmisses <> 0
group by parameter, gets, getmisses;
如何监控 SGA 中共享缓存区的命中率,应该小于1%
select sum(pins) “Total Pins”,
sum(reloads) “Total Reloads”,
sum(reloads) / sum(pins) * 100 libcache
from v$librarycache;

select sum(pinhits – reloads) / sum(pins) “hit radio”,
sum(reloads) / sum(pins) ????”reload percent” ??
from v$librarycache;
监控 SGA 中重做日志缓存区的命中率,应该小于1%
SELECT name,
gets,
misses,
immediate_gets,
immediate_misses,
Decode(gets, 0, 0, misses / gets * 100) ratio1,
Decode(immediate_gets+immediate_misses,0,0, immediate_misses / (immediate_gets + immediate_misses) * 100) ratio2
FROM v$latch
WHERE name IN (‘redo allocation’, ‘redo copy’);

监控内存和硬盘的排序比率,最好使它小于 .10,增加 sort_area_size
SELECT name, value
FROM v$sysstat
WHERE name IN (‘sorts (memory)’, ‘sorts(disk)’);
如何监控当前数据库谁在运行什幺SQL语句?
SELECT osuser, username, sql_text
from v$session a, v$sqltext b
where a.sql_address = b.address
order by address, piece;
如何查看碎片程度高的表?
SELECT segment_name table_name, COUNT(*) extents
FROM dba_segments
WHERE owner NOT IN (‘SYS’, ‘SYSTEM’)
GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM dba_segments
GROUP BY segment_name);
如何知道表在表空间中的存储情况?
select segment_name, sum(bytes), count(*) ext_quan
from dba_extents
where tablespace_name = ‘&tablespace_name’
and segment_type = ‘TABLE’
group by tablespace_name, segment_name;
如何知道索引在表空间中的存储情况?
select segment_name, count(*)
from dba_extents
where segment_type = ‘INDEX’
and owner = ‘&owner’
group by segment_name;

如何知道使用CPU多的用户session?
Select a.sid,spid,status,
substr(a.program,1,40)
prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=11 and c.sid=a.sid and a.paddr=b.addr
order by value desc;
物理读和内存读较高SQL
SELECT t.HASH_VALUE,
t.EXECUTIONS,
t.DISK_READS,
round(t.DISK_READS / t.EXECUTIONS) AS perDiskReads,
t.BUFFER_GETS,
round(t.BUFFER_GETS / t.EXECUTIONS) AS perBufferReads,
t.ELAPSED_TIME,
round(t.ELAPSED_TIME / t.EXECUTIONS) AS perElayTime,
t.CPU_TIME,
round(t.CPU_TIME / t.EXECUTIONS) AS perCpuTime,
t.FIRST_LOAD_TIME,
t.SQL_TEXT
FROM v$sql t
WHERE (t.DISK_READS / t.EXECUTIONS > 500 OR
t.BUFFER_GETS / t.EXECUTIONS > 20000)
AND t.EXECUTIONS > 0
ORDER BY 6 DESC;
查看低效率的SQL语句
SELECT EXECUTIONS,
DISK_READS,
BUFFER_GETS,
ROUND((BUFFER_GETS – DISK_READS) / BUFFER_GETS, 2) Hit_radio,
ROUND(DISK_READS / EXECUTIONS, 2) Reads_per_run,
SQL_TEXT
FROM  V$SQLAREA
WHERE EXECUTIONS > 0
AND  BUFFER_GETS > 0
AND (BUFFER_GETS – DISK_READS) / BUFFER_GETS < 0.8    ORDER BY EXECUTIONS DESC 或者 select executions exec, loads loads, parse_calls parse, disk_reads reads, buffer_gets gets, rows_processed rows_proc, sorts sorts, sql_text from v$sqlarea order by &sortkey desc; 找出oracle中从没有使用的索引 set pages 999; set heading off; spool run_monitor.sql select ‘alter index ‘||owner||’.’||index_name||’ monitoring usage;’ from dba_indexes where owner not in (‘SYS’,’SYSTEM’,’PERFSTAT’) spool off; @run_monitor 等待一段时间直到在数据库上运行了足够多的SQL语句以后,然后你就可以查询新的V$OBJECT_USAGE视图。 Select index_name,table_name,mon,used from v$object_usage; 在V$OBJECT_USAGE有一列被称作USED,它的值是YES或者NO。不幸的是,它不会告诉你Oracle使用了这个索引多少次,但是这个工具对于找出没有使用的索引还是很有用的。 自己编写的脚本 select c.SID,c.STATUS,s.NAME,b.VALUE from v$statname s, v$sesstat b, v$session c where s.STATISTIC# = b.STATISTIC# and b.SID = c.SID and b.sid=&sid and s.NAME in (‘consistent gets’,’physical reads’,’parse count (total)’,’parse count (hard)’) V$sql:查询一条sql执行时间及消耗的cpu时间,被执行及被分析的次数 Parse_calls, Executions Cpu_time, Elapsed_time Alter system flush shared_pool 清空共享池

(转张乐奕)深入内核:从Oracle ASM自动备份头块到ASMFD

深入内核:从Oracle ASM自动备份头块到ASMFD

 

在 Oracle 10.2.0.5 之前,ASM 磁盘的头块并没有自己的备份,因此一旦头块损坏,如果没有以前 kfed read 备份出来的信息,也就没有办法使用 kfed merge来作头块恢复,特别是如果一个磁盘组中所有的磁盘头块都出现问题(比如被人为地创建了 PV ),恢复 ASM 磁盘头块的操作就会非常麻烦。

但是从 Oracle 10.2.0.5 之后,ASM 磁盘的头块会自动备份在另外一个块中,这实际上是 Oracle 11g 出现的功能,不过经过测试,在 Oracle 10.2.0.5 版本中,这个备份也是存在的

正是因为存在这个备份,所以 Oracle 10.2.0.5 之后的 kfed 程序才有了新的 repair 命令,该命令将备份块直接覆盖到磁盘头块,完成修复工作。

在 Oracle 10.2.0.4 中,如果尝试执行 kfed repair ,则会报错说命令行参数不正确,此报错说明并不存在 repair 命令:

但是在 Oracle 10.2.0.5 中,执行 kfed repair ,则会说无法打开文件空,而这正说明 repair 命令是存在的,报错是因为还需要明确指定要修复哪块磁盘:

那么这个备份块具体存在哪里呢?在 Solaris 下的测试,我们使用truss来进行跟踪。

在 trace 文件中,找到下面这段,可以明确地看到 kfed 程序从第 510 个块中读出 4096 字节,然后再写回到第 0 个块中。

同样如果是在 Linux 下用裸设备作为 ASM 磁盘,并且用 strace 进行 repair 命令的跟踪,也可以得到类似结果。

那么通过 kfed 命令再来验证一下这两个块是否都标志为头块。验证结果表示块类型都为 DISKHEAD 。

那么下一个疑问是,在 11gR2 以后,ASM 磁盘组的 AU Size 可以指定不同的大小,是不是不同的 AU Size 下的磁盘头块备份都是在第 510个 块呢?还是用  truss 来跟踪一下,这里的 vdisk3 属于一个 AU Size=8M 的磁盘组,此时repair命令需要明确指定 aus,否则会报 KFED-00320 错误。

在 trace 文件中,可以发现已经不再是去读第 510 个块,而是改为读第 4094 个块。

用 kfed 验证第 4094 个块,确实标志为 DISKHEAD。

那么也就是 AU 1M 的磁盘组头块备份在第 510 个块上,而 AU 8M 的磁盘组头块备份在第 4094 个块上,备份块的存储位置有规律吗?有的,始终保存在第   2个AU 的倒数第 2 个块上。下面来验证这个观点。

对于默认的磁盘组, AU Size=1M ,每个 AU 中可以存储 256 个块,块号为  0-255 。第 1 个 AU 存储 256 个块,第 2 个 AU 最后 1 个块号为 255,倒数第 2 个块号是 254,也就是整体的第 510 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于 AU Size=8M 的磁盘组,每个 AU 可以存储 2048 个块,块号为 0-2047 。第 1 个 AU 存储 2048 个块,第 2 个 AU 最后 1 个块号为 2047 ,倒数第 2 个块号是 2046 ,也就是整体的第 4094 个块(从第 1 个 AU 的第 1 个块往后算起)。

对于其它 AU Size 磁盘组的验证,看到文章的朋友有兴趣可以自己做一下。

结论

从 Oracle 10.2.0.5 开始, ASM 磁盘已经开始自动将头块进行备份,备份块的位置在第 2 个 AU 的倒数第 2 个块上(对于默认 1M 的 AU 来说,是第 510 个块),如果头块损坏,可以用 kfed repair 命令来修复。因此对于选用 ASM 存储作为生产环境的用户来说,尽快升级到 10.2.0.5 是明智的选择。

在 Oracle 12c 中,Oracle更是推出了 ASMFD 新特性,防止ASM磁盘收到意外的伤害,具体请参考文章:Oracle 12c ASM 防火防盗新特性揭秘 。

 

在明和电子 新三板上市启动仪式上的讲话

在明和电子 新三板上市启动仪式上的讲话

明和  梁芝刚  2016年1月18日

尊敬的各位来宾、女士们、先生们、朋友们,

大家上午好!

很高兴和大家相聚于 杭州,参加 杭州明和新三板启动仪式。在此,我谨代表明和公司,向 明和公司同事和提供优质服务的券商、律师、会计师 表示诚挚的谢意!

我是2003年4月 开这个 明和电子公司,04年7月 开始研发 NETPRO备份产品,一直做到了现在 呵呵,开公司10多年的艰难困苦无以言表,10年开始算是相对顺利一些了,在 明和人的艰苦努力浴血奋战下 把 NETPRO容灾备份产品从2010年100多万 一直做到2015年 2000万,在浙江省也算是有一定知名度  国产自有品牌销售额排名第二 ,也算是做了 一点点微小微小的成绩;但是这是远远远远不够的!!!

我的大学同学说我比较有韧性 , 认准一个方向就会坚持不懈地做下去 。而我觉得我们的时间是最最宝贵的 所以要不断聚焦 ,我们做企业的人都是跟时间在赛跑 , 所以要认清自己的优势劣势 然后不断聚焦 不断打磨产品 ,坚持不懈的人 与 半途而废的人 , 1-2年时间是看不到区别 ,但是 5年后 区别就会很大 。

LOSER (美国人叫 LOSER )  ,总是归结为 自己的运气不够好  命相不够好,其实这个都是给自己的借口 。 而赢家(WINNER ) ,就是在正确的方向上不断思考不断努力不断坚持的结果 。我是从信雅达做研发出来的,在技术产品方向(眼光)上,我还是很自信的 。我们公司目前是 3个产品线 ( NETPRO容灾备份,MAXData 数据库一体机,超融合计算还在梦想中)和 1个服务 (ORACLE服务),市场空间足够支撑我们做到 几个亿到10个亿的销售额 。

2016年,随着我们 3000万融资的顺利进行 ,我们会拓展到 北京,辽宁,山东 , 上海,江苏 ( 代国超 ),安徽 ,江西 ,福建 ,广东,广西 ,云南,贵州,四川 ,到中国最美丽的地方去。我们的计划是,在浙江省 我们会招聘 3个销售小分队 ( 每个小分队完成 1500- 2000万销售额),在外省 每个省 1-2个大销售 ,每2个邻近省份   高级售前工程师 。

胡雪岩说过 ”做生意关键是你的眼光,你的眼光看到一个省,你做一个省的生意,你的眼光看到全中国,你做的是全中国的生意,你的眼光看到全世界,你就有机会做全世界的生意,你的眼光看到今天,你做今天的生意,你的眼光看到3年以后,你就做3年以后的生意。“  这是我们学习的榜样  。我们第一步先要做 12个省份的生意,16年目标是外省做到不亏钱 赚1分钱,呵呵。。。。。

最后,以毛主席的诗句作为结尾  “ 红军不怕远征难,万水千山若等闲;更喜岷山千里雪,三军过后尽开颜。“  新三板上市启动是新征程的开始,16年我们要大踏步地走向 12个省份 要完成 6000万的生意 ,17年我们要走向全国  ,以后还要把 产品卖到香港 新加坡 世界各地去 ,梦想是要有的,否则人活着跟咸鱼有什么分别呢?