免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10133 | 回复: 8

suse系统 懂shell 与sybase 进来,帮忙看一个语法 [复制链接]

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-03 15:45 |显示全部楼层
脚本如下
#!/bin/bash
DIR=`pwd`
logfile=$DIR/logfile
local_database_setup_dir=`cat $DIR/config.txt|grep local_database_setup_dir|awk -F"=" '{print $2}'`
local_loginname=`cat $DIR/config.txt|grep local_loginname|awk -F"=" '{print $2}'`
local_password=`cat $DIR/config.txt|grep local_password|awk -F"=" '{print $2}'`
local_servername=`cat $DIR/config.txt|grep local_servername|awk -F"=" '{print $2}'`
remote_servername=`cat $DIR/config.txt|grep remote_servername|awk -F"=" '{print $2}'`
database_name=`cat $DIR/config.txt|grep database_name|awk -F"=" '{print $2}'`
remote_database_port=`cat $DIR/config.txt|grep remote_database_port|awk -F"=" '{print $2}'`
remote_server_ip=`cat $DIR/config.txt|grep remote_server_ip|awk -F"=" '{print $2}'`
device_name=`cat $DIR/config.txt|grep device_name|awk -F"=" '{print $2}'`
logdevice_name=`cat $DIR/config.txt|grep logdevice_name|awk -F"=" '{print $2}'`
proxy_localtion=$remote_servername\.$database_name\.dbo.
grep $remote_servername $local_database_setup_dir/interfaces >>/dev/null
if [ $? != 0 ];then
  echo "
$remote_servername
        master tcp ether $remote_server_ip $remote_database_port
        query tcp ether $remote_server_ip $remote_database_port
   ">>$local_database_setup_dir/interfaces  
fi
#. $local_database_setup_dir/ASE150.sh
#export LANG=C
su - sybase -c"
isql -U$local_loginname -P$local_password -S$local_servername <<EOF
--创建代理数据库
USE master
go
IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name='$database_name')
DROP DATABASE $database_name
go
--create database $database_name  on $device_name = 250 log on $logdevice_name = 50 with default_location='$remote_servername\.$database_name\.dbo.'  for proxy_update
create database $database_name  on $device_name = 250 log on $logdevice_name = 50 with default_location='$proxy_localtion'  for proxy_update
go
EOF">>$logfile


执行如下
suse130:~/master_slave # cat logfile
Msg 102, Level 15, State 1:
Line 2:
Incorrect syntax near '='.
Msg 102, Level 15, State 1:
Line 4:
Incorrect syntax near '='.
suse130:~/master_slave #



好几个小时了。。帮我看看= 号那里该怎么修改

论坛徽章:
0
发表于 2014-01-03 17:31 |显示全部楼层
--创建代理数据库
USE master
go
IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name='$database_name')
DROP DATABASE $database_name
go
--create database $database_name  on $device_name = 250 log on $logdevice_name = 50 with default_location='$remote_servername\.$database_name\.dbo.'  for proxy_update
create database $database_name  on $device_name = 250 log on $logdevice_name = 50 with default_location='$proxy_localtion'  for proxy_update
go
EOF">>$logfile
======================================================

紅字的那一行,應該也是註解吧!在前面加個註解符號試試

论坛徽章:
1
发表于 2014-01-03 22:42 |显示全部楼层
Msg 102, Level 15, State 1:
Line 2:
Incorrect syntax near '='.

你的=号附近有语法错误

device_name = 250

把250换成英文字符试试,其他同理

论坛徽章:
33
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
发表于 2014-01-05 09:38 |显示全部楼层
1、把device_name = 250,把250换成英文字符试试,其他同理。

2、改动的部份如下:
--create database $database_name  on $device_name = 250 log on $logdevice_name = 50 with --default_location='$remote_servername\.$database_name\.dbo.'  for proxy_update

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-06 09:53 |显示全部楼层
红色那行不是注释。整句是创建代理数据库语法。create database name with default_location ='path ' for proxy_update回复 2# ceozenliu


   

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-06 09:56 |显示全部楼层
红色那行不是注释。整句是创建代理数据库语法。create database name with default_location ='path ' for proxy_update


其次 换成英文字符如下:
su - sybase -c"
isql -U$local_loginname -P$local_password -S$local_servername <<EOF
--创建代理数据库
USE master
go
IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name='$database_name')
DROP DATABASE $database_name
go
create database $database_name  on $device_name = convert(varchar(10),250) log on $logdevice_name = convert(varchar(10),50) with default_location='$remote_servername\.$database_name\.dbo.'  for proxy_update
go
EOF">>$logfile
还是一样的语法错误
回复 4# wfcjz


   

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-06 09:59 |显示全部楼层
另外,单独测试
IF EXISTS (SELECT 1 FROM master.dbo.sysdatabases WHERE name='$database_name')
DROP DATABASE $database_name
go
这一句的语法没有问题。

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-06 10:09 |显示全部楼层
这次换成字符char
create database $database_name  on $device_name =convert(char,250) log on $logdevice_name =convert(char,50) with default_location='$remote_servername.$database_name.dbo.'  for proxy_update
go

一样的报错
另外,
create database $database_name  with default_location='$remote_servername.$database_name.dbo.'  for proxy_update
不加指定的数据设备,语法上没有错误,只是提示必须添加指定数据设备而已。所以估计  on $device_name =convert(char,250) log on $logdevice_name =convert(char,50) 这里的语法有问题
回复 4# wfcjz


   

论坛徽章:
1
戌狗
日期:2014-08-05 13:32:44
发表于 2014-01-06 15:58 |显示全部楼层
问题解决了,是我自己大意粗心了。
device_name=`cat $DIR/config.txt|grep device_name|awk -F"=" '{print $2}'`
logdevice_name=`cat $DIR/config.txt|grep logdevice_name|awk -F"=" '{print $2}'`
其中device_name  取值grep 参数 不是唯一。在Logdevice_name中也包含有grep 参数 。。导致$device_name的值有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP