현상

powershell의 invoke-sqlcmd를 사용하여 DB 쿼리를 실행하는 도중 강제 종료

에러 내용

invoke-sqlcmd : Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the
server is not responding.

원인

쿼리 실행 timeout 설정을 하지 않아, 쿼리 실행 시간이 Default 30초를 초과하여 종료되는 현상

해소

-Querytimeout 옵션으로 쿼리 실행 가능 시간을 설정

-- Query Timeout 제한 없음 : 0
Invoke-Sqlcmd -ServerInstance "$serverInstance" -Querytimeout 0 -Query "Select * from ...."

참고

https://stackoverflow.com/questions/52545013/getting-execution-timeout-expired-running-sql-server-backup-through-invoke-sql/56991850

 

에러 내용

데이터베이스 보안 주체는 데이터베이스의 스키마을(를) 소유하며 삭제할 수 없습니다

(Microsoft SQL Server, 오류: 15138)

 

Msg 15110, Level 16, State 1, Line 14

The proposed new database owner is already a user or aliased in the database.

 

원인

변경하려는 계정이 이미 DB에 할당되어 있기 때문에

해소

DB의 기존 소유자를 삭제하는것이 아니라,

DB에 소유자을 변경하려는 계정을 삭제 후 실행

만약 스키마 정보에 삭제하려는 계정이 매칭되어 있다면, 변경 후 진행

USE TestDB;
DROP USER Test_srv;
--15138 오류가 난다면

select * from sys.schemas where principal_id = user_id('Test_srv');
-- 삭제하려는 아이디로 매핑된 스키마가 있는지 확인

ALTER AUTHORIZATION ON Schema::db_owner TO dbo;
-- db_owner의 소유자 정보를 dbo로 변경

-- add it back in AND change the dbowner
ALTER AUTHORIZATION ON DATABASE::TestDB TO Test_srv;    
-- DB 소유권 변경

참고

https://tori0712.tistory.com/5

http://www.sqlfingers.com/2017/07/sql-server-failure-to-change-database.html

 

commands

telegram 대화창에 /명령 형태로 전달

/dm_oncall 메시지를 python 코드로 확인 후 message 전달

--------------

@bot.message_handler(commands=['dm_oncall'])
    def trigger(message):
        print("## bot.message_handler dm_oncall message => ", message)
        print("## bot.message_handler dm_oncall message.text => ", message.text)

        cmd = message.text
		
		#message send 
		msg_text = """ Select Day """
		bot.send_message(message.chat.id, msg_text)
		
		#button message send 
        button_list = show_button(["Yesterday", "Today", "Tomorrow"],"oncall", 1)
        bot.send_message(message.chat.id, "당직을 확인할 날짜를 선택하세요", reply_markup=button_list)

call_back

telegram의 대화가 출력되는 부분에 버튼 형태로 전달

버튼이름은 대화창에 출력되고, call_back 변수에 지정한 메시지는 대화창에 보여지지 않고 백그라운드에서 python에서 mssage를 캡쳐하여 처리 가능

php 코드로 telegram에 버튼형태로 call_back에 message 추가하여 전달

---------

$body = file_get_contents("php://input");
$obj = json_decode($body);
$bot_query = 'https://api.telegram.org/bot'.$obj->bot_token;
$chat_id = $obj->chat_id;

# send text
$text = 'Keyboard message test !!';

$keyboard = array(
    "inline_keyboard" => array(
        array(
            array(
                "text" => "Manager",
                "callback_data" => "/manager test"
            )
        )
    )
);
$keyboard = json_encode($keyboard, true);

$sendto = $bot_query.'/sendMessage?chat_id='.$chat_id.'&parse_mode=HTML&reply_markup='.$keyboard.'&text='.urlencode($text);

$response = file_get_contents($sendto);

Keyboard Button

telegram의 대화창에 아닌, 메시지 입력창에 버튼형태로 메시지를 전달

 

python 코드로 메시지 입력창에 버튼 형태로 전달

-----------

import telebot
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, KeyboardButton, ReplyKeyboardMarkup

token = '14????????:XXXXXXX_XXXXX-XXXXXXXXXXXXXXX'
bot = telebot.TeleBot(token)


@bot.callback_query_handler(func=lambda c: "manager" in c.data.split(",")[0])
def manager_callback(call):

    print("## bot.callback_query_handler call.data => ", call.data)
    print("## bot.callback_query_handler call.message => ", call.message)

    try:
        data_selected = call.data

        data_oncall_Yesterday = '/dm_oncall ,Yesterday'
        data_oncall_Today = '/dm_oncall ,Today'
        data_oncall_Tomorrow = '/dm_oncall ,Tomorrow'
        data_oncall_Cancel = '/Cancel'

        main_menu_keyboard = {"keyboard":[[data_oncall_Yesterday],[data_oncall_Today],[data_oncall_Tomorrow],[data_oncall_Cancel]],"resize_keyboard": True,"one_time_keyboard": True}
        print("## main_menu_keyboard => ", main_menu_keyboard)

        bot.send_message(chat_id=call.message.chat.id, text='Select Menu.', reply_markup=json.dumps(main_menu_keyboard))

    except BaseException as e:
        print("## [Exception] manager_callback ==> ",str(e))

 

참고

https://blog.psangwoo.com/coding/2018/08/20/python-telegram-bot-4.html

 


to Top