يبدو AWK لقطع اتصال جلسة العمل DB2 بلدي عندما الأنابيب

StackOverflow https://stackoverflow.com/questions/510697

سؤال

وأنا محاولة تشغيل الأمر التالي في KornShell (KSH):

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" | awk '{print $1"."$2}'`

ما أحاول تحقيقه هو وضع قائمة من المؤشرات على جدول معين في صفيف التي يمكنني تكرار في وقت لاحق من خلال.

والمشكلة هي، عند تشغيل الأمر أعلاه محتويات المصفوفة تبدأ مع الرسالة خطأ "SQL1024N" (التي تقول لي اتصال قاعدة البيانات غير موجود).

ولكن، إذا كنت إزالة awk في نهاية البيان وذلك:

set -A INDEXES `db2 "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail"`

ويعمل على ما يرام (وأيضا، بقدر ما يعود البيانات. ومن الواضح دون awk أنا لا التقاط البيانات الصحيحة).

لا أحد يعرف لماذا awk هو وجود هذا التأثير؟

وأنا أقدر أن هناك أكثر من طريقة للحصول على هذه البيانات، ولكنه يحير لي لماذا يحدث هذا.

وشكرا مقدما.

هل كانت مفيدة؟

المحلول

في هذه الحالة، عندما يقول DB2 CLP أنه لا علاقة له قاعدة البيانات، انها لقذيفة فتحت عملية الفرعية التي تتطلب الخاصة عملية الخلفية db2bp مخصصة لها، والتي لا يمكن الوصول إلى اتصال افتتحه قذيفة الأصلي معالجة. انها ليست أن شيئا ما تصبح قطع، فهو أن عملية قذيفة أنشئت حديثا (وعملية db2bp المرافقة لها) يتم إنشاؤها ولكن لم يتم قالت للاتصال قاعدة البيانات. طريقة واحدة لمعالجة هذا هو ربط بشكل واضح (أو إعادة الاتصال) إلى قاعدة البيانات عندما تعلم أنك في واحدة من تلك الحالات.

set -A INDEXES `db2 connect to watevrDB >/dev/null;db2 -x describe indexes for table ${TABSCHEMA}.${TABNAME} show detail | awk {'print $1"."$2'}`

وأنا أدرك أن هذا السؤال هو أكثر حول البرمجة وAWK مع DB2 من حوالي كتالوج النظام، وإلا لكنت قد أوصى بعض الاستفسارات كتالوج مباشرة لإنتاج نفس النتيجة.

نصائح أخرى

وأشك في انها AWK في حد ذاته. ربما DB2 هو خاص حول المعياري يتم توصيل إلى الكتابة البعيدة أو وحدة التحكم؟ أو على الأقل لا يحب عندما يكون متصلا الأنابيب.

وهذا هو واحد غير عادي، وكما يقول باييس وربما هو هوس DB2.

ولقد رأيت قضايا مماثلة عندما، على سبيل المثال استخدام الوقت أو تيميكس قبل سلسلة أمر DB2، حيث لم يكن لديك قاعدة بيانات DB2 محددة للاتصال.

وهناك على DB2DBDFT متغير البيئة الذي يضع قاعدة البيانات الافتراضية للاتصالات ضمنية. أنا آسف أن أقول إنني لست متأكدا إذا كان هذا المتغير هو متاح للمستخدمين غير DBA (على افتراض كنت مطور التطبيق). ومن الجدير التحقيق إذا وضع هذا المتغير عن طريق:

وdb2set DB2DBDFT = $ {your_db_name}

وإعادة المحاولة الاستعلام الخاص بك.

إذا كان لديك قواعد بيانات متعددة بيئتك يمكن الاتصال يمكنك إلغاء تعيين المتغير DB2DBDFT بمجرد الانتهاء من عملك.

وحاول الأمر DB2 مع التبديل -x:

وdb2 **-x** "describe indexes for table ${TABSCHEMA}.${TABNAME} show detail" ....

ولقد كان الحالات التي شفي هذا عدم قدرتي على انتاج الأنابيب إلى AWK.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top